时间:2021-07-01 10:21:17 帮助过:27人阅读
其主键索引与普通索引没有本质差异:
画外音:MyISAM的表可以没有主键。
主键索引与普通索引是两棵独立的索引B+树,通过索引列查找时,先定位到B+树的叶子节点,再通过指针定位到行记录。
InnoDB的主键索引与行记录是存储在一起的,故叫做聚集索引(Clustered Index):
画外音:因此,InnoDB的PK查询是非常快的。
因为这个特性,InnoDB的表必须要有聚集索引:
(1)如果表定义了PK,则PK就是聚集索引;
(2)如果表没有定义PK,则第一个非空unique列是聚集索引;
(3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引;
聚集索引,也只能够有一个,因为数据行在物理磁盘上只能有一份聚集存储。
InnoDB的普通索引可以有多个,它与聚集索引是不同的:
对于InnoDB表,这里的启示是:
(1)不建议使用较长的列做主键,因为所有的普通索引都会存储主键,会导致普通索引过于庞大;
(2)建议使用趋势递增的key做主键,由于数据行与索引一体,这样不至于插入记录时,有大量索引分裂,行记录移动;
MySql索引底层原理
标签:连续 利用 查找树 arc 上层 图书馆 平衡二叉树 float 特性