mysql索引(一)

1.myisam索引

myisam的索引与行记录是分开存储的.

主键索引与普通索引没有本质区别:

有连续聚集区域单独存储行记录

主键索引叶子节点,存储主键,与对应行记录的指针

普通索引的叶子节点,存储索引列,与行记录对应的指针

换句话说,myisam表可以没有主键

主键索引和普通索引是两颗独立的b+树,索引树与行记录是单独的两颗树

2.innodb索引

innodb的主键索引和行记录存储在一起,所以称为聚集索引

没有单独区域存储行记录

主键索引叶子节点,存储主键,与对应行记录,而不是指针。

所以innodb的pk索引查询是非常快的

因为这个特性,所以innodb表必须有聚集索引:

1.如果表定义了pk,pk就是聚集索引

2.如果表没定义pk,第一个非空unique列为聚集索引

3.否则,innodb会创建一个隐藏的row-id作为聚集索引

聚集索引,也只能有一个,因为数据行在物理磁盘上只能有一份聚集存储

innodb的普通索引可以有多个,它与聚集索引则不同的是:

叶子节点存储主键(也不是指针)

你可能感兴趣的:(mysql索引(一))