ITPub博客

首页 > Linux操作系统 > Linux操作系统 > MySQL 缺少主键的表的性能下降的原因

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

原创 Linux操作系统 作者:张冲andy 时间:2023-10-04 23:04:14 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。换句话说,对于插入到没有主键的表中的每个新行,它需要在数据字典上锁定以生成该键,因为生成的键在实例范围内是 uniq的。数据字典互斥体DICT_SYS不仅用于生成DB _ ROW _ IDs,还用于Innodb Engine中的许多其他重要地方。因此,如果表缺少主键,MySQL服务器实例上的争用就会增加。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31383567/viewspace-2986946/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
支持就关注我个人公众号:DBA烂笔头 。专注数据库领域,熟悉oracle、mysql、redis、mongodb,clickhouse等相关技术

注册时间:2016-08-11

  • 博文量
    626
  • 访问量
    286290