博客
关于我
mysql索引能重复吗_mysql “索引”能重复吗?“唯一索引”与“索引”区别是什么?...
阅读量:788 次
发布时间:2023-02-13

本文共 928 字,大约阅读时间需要 3 分钟。

InnoDB表中每个表都包含一个特殊的索引,称为聚集索引(clustered index)。这个索引的主要作用是存储表中行的数据。通常,表的主键会被用作聚集索引。如果表中没有定义主键,MySQL会选择第一个唯一索引(且该索引只包含非空列)作为主键,并将其作为聚集索引。如果表中没有这样的索引,InnoDB会自动生成一个隐藏的聚集索引,该索引包含一个内部生成的6字节ID字段,这个ID会按照插入顺序递增。这样,表中的行按照这个ID的值进行物理排序。

聚集索引的主要优势在于能够快速定位数据行,因为它和数据位于同一页面中。对于较大的表,这种结构可以减少磁盘I/O操作的次数,从而提升性能。例如,InnoDB的存储结构与MyISAM不同,后者将数据行和索引记录存储在不同的文件中,这样可能需要更多的磁盘读取操作。

在InnoDB中,非聚集索引(也称为辅助索引)包含了每条记录的主键值。InnoDB使用这个主键值在聚集索引中搜索行数据。值得注意的是,如果主键字段较长,辅助索引占用的空间也会相应增加,因此在选择主键时,建议尽量使用较短的字段。

以下是MySQL官方文档中的相关说明,可能存在我的理解偏差,请以官方文档为准:每个InnoDB表都有一个特殊的索引,称为聚集索引。这个索引存储了表中行的数据。如果表定义了主键,主键索引就是聚集索引。如果没有定义主键,MySQL会选择第一个唯一索引(且该索引只包含非空列)作为主键,并将其作为聚集索引。如果没有这样的索引,InnoDB会自动生成一个隐藏的聚集索引,该索引包含一个内部生成的6字节ID字段,这个ID会按照插入顺序递增。这样,表中的行按照这个ID的值进行物理排序。

通过聚集索引,可以快速定位数据行,因为它和数据位于同一页面中。对于较大的表,这种结构可以减少磁盘I/O操作的次数,从而提升性能。例如,InnoDB的存储结构与MyISAM不同,后者将数据行和索引记录存储在不同的文件中,这样可能需要更多的磁盘读取操作。

在InnoDB中,辅助索引包含了每条记录的主键值。InnoDB使用这个主键值在聚集索引中搜索行数据。如果主键字段较长,辅助索引占用的空间也会相应增加,因此在选择主键时,建议尽量使用较短的字段。

转载地址:http://tadfk.baihongyu.com/

你可能感兴趣的文章
MySQL索引那些事:什么是索引?为什么加索引就查得快了?
查看>>
Mysql索引(1):索引概述
查看>>
Mysql索引(2):索引结构
查看>>
Mysql索引(3):索引分类
查看>>
Mysql索引(4):索引语法
查看>>
mysql级联删除_Mysql笔记系列,DQL基础复习,Mysql的约束与范式
查看>>
mysql练习语句
查看>>
mysql经常使用命令
查看>>
MySQL经常使用技巧
查看>>
mysql给root开启远程访问权限,修改root密码
查看>>
mysql给账号授权相关功能 | 表、视图等
查看>>
MySQL缓存使用率超过80%的解决方法
查看>>
Mysql缓存调优的基本知识(附Demo)
查看>>
mysql编写存储过程
查看>>
mysql网站打开慢问题排查&数据库优化
查看>>