1.myisam索引
myisam的索引与行记录是分开存储的.
主键索引与普通索引没有本质区别:
有连续聚集区域单独存储行记录
主键索引叶子节点,存储主键,与对应行记录的指针
普通索引的叶子节点,存储索引列,与行记录对应的指针
换句话说,myisam表可以没有主键
主键索引和普通索引是两颗独立的b+树,索引树与行记录是单独的两颗树
2.innodb索引
innodb的主键索引和行记录存储在一起,所以称为聚集索引
没有单独区域存储行记录
主键索引叶子节点,存储主键,与对应行记录,而不是指针。
所以innodb的pk索引查询是非常快的
因为这个特性,所以innodb表必须有聚集索引:
1.如果表定义了pk,pk就是聚集索引
2.如果表没定义pk,第一个非空unique列为聚集索引
3.否则,innodb会创建一个隐藏的row-id作为聚集索引
聚集索引,也只能有一个,因为数据行在物理磁盘上只能有一份聚集存储
innodb的普通索引可以有多个,它与聚集索引则不同的是:
叶子节点存储主键(也不是指针)
网友评论