数据库中B+树索引可分为聚集索引和非聚集索引,不管是索引是否聚集,内部都是B+树,叶子节点存放着所有的数据。聚集索引与非聚集索引的不同在于叶子结点存放的是否是一整行的信息。
1.聚集索引
数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。
聚集索引就是按照每张表的主键构造一棵B+树,同时叶子结点存放的即为整张表的行记录数据,也将聚集索引的叶子结点称为数据页。
数据页上存放的是完整的每行记录,非叶子结点的数据页存放的是键值和指向数据页的偏移量,不是完整的行记录。数据行的物理顺序与列值的顺序相同,页之间与行之间都是通过双向链表进行维护的。注:聚集索引的存储并不是物理上连续的,而是逻辑上连续的。
2.非聚集索引
叶子节点并不包含行记录的全部数据,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。
每张表上可以有多个非聚集索引,当使用辅助索引来查找数据时,数据库引擎先通过遍历辅助索引查找到叶节点上的指针,通过指针得到指向主键索引的主键,再通过主键索引来查找一个完整的行记录。
我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。
MySQL-聚集索引与非聚集索引
最新推荐文章于 2024-01-27 13:36:45 发布