加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

如何避免回表查询?什么是索引覆盖? | 1分钟MySQL优化系列

发布时间:2019-07-29 09:44:48 所属栏目:MySql教程 来源:58沈剑
导读:《迅猛定位低效SQL?》留了一个尾巴: selectid,namewherename='shenjian' selectid,name,sexwherename='shenjian' 多查询了一个属性,为何检索过程完全不同? 什么是回表查询? 什么是索引覆盖? 如何实现索引覆盖? 哪些场景,可以利用索引覆盖来优化SQL? 这

可以看到:

  1. select id,name ... where name='shenjian'; 
  2. select id,name,sex ... where name='shenjian'; 

都能够命中索引覆盖,无需回表。

画外音,Extra:Using index。

四、哪些场景可以利用索引覆盖来优化SQL?

场景1:全表count查询优化

如何避免回表查询?什么是索引覆盖? | 1分钟MySQL优化系列

原表为:

  1. user(PK id, name, sex); 

直接:

  1. select count(name) from user; 

不能利用索引覆盖。

添加索引:

  1. alter table user add key(name); 

就能够利用索引覆盖提效。

场景2:列查询回表优化

  1. select id,name,sex ... where name='shenjian'; 

这个例子不再赘述,将单列索引(name)升级为联合索引(name, sex),即可避免回表。

场景3:分页查询

  1. select id,name,sex ... order by name limit 500,100; 

将单列索引(name)升级为联合索引(name, sex),也可以避免回表。

InnoDB聚集索引普通索引,回表,索引覆盖,希望这1分钟大家有收获。

提示,如果你不清楚explain结果Extra字段为Using index的含义,请阅读前序文章:《如何利用工具,迅猛定位低效SQL?》

【本文为51CTO专栏作者“58沈剑”原创稿件,转载请联系原作者】

如何避免回表查询?什么是索引覆盖? | 1分钟MySQL优化系列

戳这里,看该作者更多好文

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!