首页 > 项目 > 当前页面

MySQL索引:聚集索引、非聚集索引、联合索引、回表、索引覆盖

2024-10-03 NEW个对象

一、聚集索引和非聚集索引

 

在MySql里,innodb通过主键构建一个B+树,该B+树用来存放数据(非叶子结点存放主键,叶子结点存放数据)。

 

如果不存在主键:MySql使用唯一索引,如果不存在唯一索引,那么就会创建一个隐式的RowId构建一个聚簇索引。

 

二、其它索引

 

除去主键索引,还有其它的索引,每个索引都会建立一个B+树,这些B+树是非聚集索引,非聚集索引,非叶子结点存放索引,叶子结点存放表ID。

 

三、回表

 

在通过索引查询的过程中,先通过索引查询到主键,然后再通过主键去主键索引构建的B+树获取数据,这就是一次回表操作,也就是一次索引B+树,一次主键索引B+树。

 

四、联合索引

 

联合索引一起构成一个B+树,也是非聚簇索引结构,大致是这样的:index(a,b)

 

从图中可以看出:结构是按照a排序的,再确定了a的值之后,再按照b排序。

 

如果不确定a的值,按照b的值查询,那么b的值会没有规律的出现在B+树的任意位置,这就导致组合索引失效。
 

在这里插入图片描述

 

五、索引覆盖

 

如果在由索引构建的B+树里有查询需要的数据,那么就需要回表操作,这就是索引覆盖。

相关文章

  • Git信息提交规范

    Git提交信息格式:每次提交都应该有一个简明扼要的提交信息,格式为类型(范围):描述。常见的类型包括feat(新功能)、fix(修复Bug)、docs(文档修改)、style(代码格式修改)、test(测试相关修改)、refactor(重构代码)、chore(构建或工具相关的修改)等。

    NEW个对象 2024-10-03

  • 你是如何负责一个项目的?

    你是如何负责一个项目的?

    NEW个对象 2026-07-14

  • B树与B+树的区别

    B树与B+树的区别

    NEW个对象 2024-10-20

NEW个对象 NEW个对象
JAVA是世界上最好的语言