前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记 | 深入浅出索引(下)

笔记 | 深入浅出索引(下)

作者头像
如梦初醒_-
发布2022-10-26 15:56:17
1770
发布2022-10-26 15:56:17
举报
文章被收录于专栏:最后一声蝉鸣最后一声蝉鸣

覆盖索引

【举栗】

代码语言:javascript
复制
mysql> create table T (
 ID int primary key,
 k int NOT NULL DEFAULT 0, 
s varchar(16) NOT NULL DEFAULT '',
 index k(k))
 engine=InnoDB;
代码语言:javascript
复制
insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');
执行 select * from T where k between 3 and 5
  • 在 k 索引树上找到 k=3 的记录,取得 ID = 300;
  • 再到 ID 索引树查到 ID=300 对应的 R3;
  • 在 k 索引树取下一个值 k=5,取得 ID=500;
  • 再回到 ID 索引树查到 ID=500 对应的 R4;
  • 在 k 索引树取下一个值 k=6,不满足条件,循环结束。

在这个过程中,回到主键索引树搜索的过程,我们称为回表

执行 select ID from T where k between 3 and 5
  • 这时只需要查 ID 的值,而 ID 的值已经在 k 索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 k 已经“覆盖了”我们的查询需求,我们称为覆盖索引

二级索引查询结果仅仅是主键 此时不需要回表查主键索引 称为覆盖索引 由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

最左前缀原则

(name,age)索引示意图

索引项是按照索引定义里面出现的字段顺序排序的 联合索引(A, B)意味着不需要建立A的索引了,因为这个联合索引意味着建立了(A,B)和(A)这两种索引 如果单使用age作为条件,索引是不会生效的,除非单独建立一个age索引,因为它遵循最左原则

索引下推

代码语言:javascript
复制
mysql> select * from tuser where name like '张%' and age=10 and ismale=1;

MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

无索引下推执行流程

索引下推执行流程

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 执行 select * from T where k between 3 and 5
  • 执行 select ID from T where k between 3 and 5
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档