本文共 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/