天天看点

mysql聚集索引与辅助索引

聚集索引:按照每张表的主键构造一颗B+树。同时也叶子节点中存放的即为整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分。同B+树数据结构一样,每个数据页一样都是通过一个双向链表来进行链接。 由于实际的数据页只能按照一棵B+树进行排序,因此数据库中每张表只能有一个聚集索引。

聚集索引的好处:

  • 数据页上存放的是完整的每行的纪录,而非数据页的索引页中,存放的仅仅是键值及指向数据页的偏移量,而不是一个完整的行记录
  • 它对于主键的排序查找和范围查找速度非常快

注:聚集索引的存储不是物理上连续的,而是逻辑上连续的。这其中有两点:

  1. 数据页通过双向链表链接,并按照主键排序
  2. 每个数据页中的记录也通过双向链表进行维护的,物理存储上可以同样不按照主键存储

辅助索引(也称非聚集索引),叶子节点并不包括行记录的全部数据。叶子节点除了包括键值以外,每个叶子节点索引行中还包括一个书签(bookmark)。 这个书签用来告诉InnoDB引擎从哪里可以找到与索引相对应的行数据。 由于InnoDB引擎是索引组织表,因此,这个书签就是相应的行数据的聚集索引键。

辅助索引的存在不会对影响数据在聚集索引中的组织,因此每张表上可以有多个辅助索引。

继续阅读