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

2023年 10月 5日 100.7k 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服务器实例上的争用就会增加。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论