MySQL 缺少主键的表的性能下降的原因

2023年 10月 5日 45.1k 0

MySQL 为什么缺少主键的表的性能下降?

因为每个Innodb表都是一个索引组织的表,每个Innodb表的 leaf level 都由一个键标识。如果表上定义了主键,则该主键标识每一行。

对于表上定义的每个附加索引(非主键索引),主键被附加在索引键上,以标识表叶级别的行。

当表上没有定义主键时会发生什么?

MySQL服务器为每个表行生成一个行ID,称为DB_ROW_ID。DB_ROW_ID的大小是一个6字节的自动递增键。生成DB_ROW_ID使用dict_sys_get_new_row_id()函数,该函数转换为数据字典互斥体。由dict0dict.cc创建的互斥体DICT_SYS。换句话说,对于插入到没有主键的表中的每个新行,它需要在数据字典上锁定以生成该键,因为生成的键在实例范围内是唯一的。数据字典互斥体DICT_SYS不仅用于生成DB _ ROW _ IDs,还用于Innodb Engine中的许多其他重要地方。因此,如果表缺少主键,MySQL服务器实例上的争用就会增加。

相关文章

pt-kill工具的使用
pt-ioprofile工具包的使用
数据库管理-第216期 Oracle的高可用-01(20240703)
DBMS_REPAIR EXAMPLE SCRIPT WITH PARTITION
数据库事务的四大特性: ACID 
使用BBED修复损坏的SYSTEM文件头

发布评论