MySQL聚集索引与辅助索引的区别

   聚集索引也称聚簇索引,英文为clustered index。从物理存储角度来分, 索引可以分为聚集索引和辅助索引(secondary index,也称作非聚簇索引),区别主要看叶子节点存了什么数据,即聚集索引的叶子节点存放所有数据,而非聚集索引仍然是索引节点,只不过有一个指针指向对应的数据块。

   索引和数据放在一个数据结构中,innodb的主键索引就是一个聚簇索引,一个表只有一个聚簇索引,是一种B+tree的树状结构,非叶子节点之存储索引值和子节点地址,叶子节点存储数据。

   聚集索引与辅助索引相同点和区别:
   相同点:数据结构都是B+树,即高度是平衡的,叶子结点存放着所有的数据。
   不同点:聚集索引叶子结点存放的是一整行的信息,辅助索引的叶子节点不包含行记录的全部数据。

   聚簇索引的叶子节点存放的是数据节点,而辅助索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。

   主键一定是聚簇索引,如果开发人员不手动设置 主键,那么MySQL会默认使用非空的 Unique 索引,若没有非空的 Unique 索引,则会使用数据库内部的一个行的 id 来当作主键索引,其它普通索引需要区分SQL 场景,当 SQL 查询的列就是索引本身时,我们称这种场景下该普通索引也可以叫做聚簇索引,MyisAM 引擎没有聚簇索引。

   一张表只允许存在一个聚簇索引 , 因为数据一旦存储,顺序只能有一种。但是,一个表可以有多个非聚簇索引 。

   辅助索引的存在并不影响数据在聚集索引中的组织,因此每张表上可以有多个辅助索引,但只能有一个聚集索引。当通过辅助索引来寻找数据时, InnoDB存储引擎会遍历辅助索引并通过叶子级别的指针获得指向主键索引的主键,然后再通过主键索引来找到一个完整的行记录。

posted @ 2021-05-16 21:49  楼兰胡杨  阅读(759)  评论(0编辑  收藏  举报