GreatSQL社区

搜索

chongzh

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

chongzh 已有 479 次阅读2023-10-4 23:00 |个人分类:Mysql 原理|系统分类:原理&产品解读

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服务器实例上的争用就会增加。

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-5-7 02:15 , Processed in 0.013453 second(s), 8 queries , Redis On.
返回顶部