聚簇索引和非聚簇索引的原理

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

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

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

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

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

一·、聚簇索引

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

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

聚簇索引的优点:

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

缺点:

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

二、辅助索引(非聚簇索引)

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

辅助索引的存在不影响数据在聚簇索引中的组织,所以一张表可以有多个辅助索引。
在这里插入图片描述
参考-聚簇索引和非聚簇索引

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值