关于索引(2)

2017-09-03  本文已影响34人  Terminalist

不是一种单独的索引方式,而是一种数据存储方式,innoDB的聚簇索引实际上在同一个结构中保存了B-tree索引和数据行;

当表有聚簇索引时,它的数据行实际上存放在索引的叶子页上,叶子页包含了行的全部数据,而节点页只包含索引列;"聚簇"表示数据行和相邻的键值紧凑地存储在一起,因为无法同时把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引,类似于oracle的索引组织表;
下图便展示了mysql的Innodb主键索引的原理图:


主键索引的原理图.png

在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶子页节点data域保存了完整的数据记录,这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引,所以必须有主键,也就是说innoDB通过主键聚集数据,如果没有显示定义,innoDB会选择一个唯一的非空索引代替.如果没有这样的索引,innoDB会隐式定义一个主键来作为聚簇索引.

不应该适用二级索引,应该使用hash索引;

以上便是对索引的相关补充,后续将会对索引优化继续展开书写...

上一篇 下一篇

猜你喜欢

热点阅读