MySQL是为主键创建额外的索引还是将数据本身用作索引
找不到明确的答案。 我知道当您创建主键时,MySQL会根据该主键对数据进行排序,问题是,它实际上是创建了另一个索引,还是使用实际数据作为索引,因为它应该按主键排序?
编辑:
如果我有一个表,具有索引A和索引B,但没有主键,那么我有数据+索引A+索引B。如果我将表更改为将索引A的列作为主键,我将只有数据(它也用作索引)+索引B,对吗?以上是内存使用量解决方案
Clustered and Secondary Indexes
每个InnoDB表都有一个特殊的索引,称为聚集索引,行的数据存储在其中。通常,聚集索引是主键的同义词。要从查询、插入和其他数据库操作中获得最佳性能,您必须了解InnoDB如何使用聚集索引来优化每个表的最常见的查找和DML操作。
在表上定义主键时,InnoDB会将其用作聚集索引
如果您没有为表定义主键,MySQL将定位所有键列都不为空的第一个唯一索引,并且InnoDB将其用作聚集索引。
如果表没有主键或合适的唯一索引,InnoDB会在包含行ID值的合成列上在内部生成一个名为GEN_CLUST_INDEX的隐藏聚集索引。按照InnoDB分配给此类表中各行的ID进行排序。行ID是一个6字节的字段,随着新行的插入而单调增加。因此,按行ID排序的行实际上是按插入顺序排列的。
聚集索引如何加快查询速度
通过聚集索引访问行很快,因为索引搜索直接指向包含所有行数据的页。如果表很大,则与使用索引记录中的不同页存储行数据的存储组织相比,聚集索引体系结构通常可以节省磁盘I/O操作。
相关文章