首页 > 编程知识 正文

聚簇索引和普通索引,聚簇索引的优点

时间:2023-05-03 17:41:53 阅读:201549 作者:4990

在MySQL索引实现原理中,我们提到了聚簇索引和非聚簇索引,在这里对这两个索引进行更深一步的探讨。

首先我们需要知道:在InnoDB表中,表数据文件本身就是按B+树组织的一个索引结构,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子结点中存放的就是整张表的行记录数据,所以聚簇索引的叶子结点也被称为数据页。

而我们在日常工作中,根据实际情况自行添加的索引都是辅助索引,辅助索引就是一个为了寻找主键索引的二级索引,它先寻找到主键索引,再通过主键索引去寻找数据。

所以聚簇索引并不是一种单独的索引类型,而是一种数据存储方式

聚簇索引和非聚簇索引都有许多别名,聚簇索引可以被称为主键索引、聚集索引,而非聚簇索引也可以被称为辅助索引、二级索引。这两种索引的内部都是B+树。

一·、聚簇索引

聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,这个叶子节点也被称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。

Innodb通过主键聚集数据,如果没有定义主键,innodb会选择非空的唯一索引代替。如果没有这样的索引,innodb会隐式的定义一个主键来作为聚簇索引。

聚簇索引的优点:

数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快聚簇索引对于主键的排序查找和范围查找速度非常快

缺点:

插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。 二、辅助索引(非聚簇索引)

在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找。辅助索引叶子节点存储的不是行的物理位置,而是主键值。因此通过辅助索引首先找到的是主键值,然后再通过主键值找到数据行的数据页。

辅助索引的存在不影响数据在聚簇索引中的组织,所以一张表可以有多个辅助索引。

参考-聚簇索引和非聚簇索引

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。