【mysql】索引 回表 覆盖索引 索引下推
2024-09-04 08:45:41
索引类型
索引类型分为主键索引和非主键索引。(一定要牢记,是怎么存储数据的)
- 主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。
- 非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。
聚簇索引
聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。
因为B+TREE的原因,最好使用连续的整数字段,更好确定查找访问范围
回表
根据上面的索引结构说明,主键索引和普通索引的查询区别
- 如果语句是 select * from T where ID=500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树;
- 如果语句是 select * from T where k=5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表。
覆盖索引
如果执行的语句是 select ID from T where k between 3 and 5,这时只需要查 ID 的值,而 ID 的值已经在 k 索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 k 已经“覆盖了”我们的查询需求,我们称为覆盖索引。
索引下推
索引下推是MySQL5.6版本推出的优化手段
默认是开启的,可以通过下面命令关闭
SET optimizer_switch = 'index_condition_pushdown=off';
假如有一下SQL,不通的执行过程,如下图表示
index(name,age)
mysql> select * from tuser where name like '张%' and age=10 and ismale=1;
可以看到,无索引下推是,每次都需要回表查询,而下推的是在先过滤好结果集,回表拿select * 的数据
无索引下推
有索引下推
最新文章
- 如何用 .Net 开发
- Beta版本冲刺———第七天
- Highcharts入门+Highcharts基础教程,【非常值得学习的资料】
- lintcode 中等题:Max Points on a Line 最多有多少个点在一条直线上
- 八月份 CUGBACM_Summer_Tranning 题解
- QJsonObject和QJsonArray的巨坑
- wcf 上传文件报413,404和发布错误
- 校验Linux程序是否被黑客修改
- docker学习系列(一):docker 基础
- SpringBoot初探之Swagger配置
- 5分钟安装 关于win10安装composer PHP 用来管理依赖(dependency)关系的工具
- 在浏览器端获取文件的MD5值
- 《DOM Scripting》学习笔记-——第四章 案列分析 JS美术馆(点击链接到图片)
- 关于sql优化的一些点
- python Flask框架mysql数据库配置
- tar只解压tar包中某个文件
- ES6 模块
- 新手如何学习python(python学习路线图)
- Akka-Cluster(1)- Cluster Singleton 单例节点
- POJ 2456 Agressive cows(二分)
热门文章
- Ubuntu几秒钟没有任何操作自动黑屏
- Flutter保持页面状态AutomaticKeepAliveClientMixin
- 开源一个使用python和pyQT实现的产测工具
- Git使用ssh公钥
- Protocol buffers编写风格指南
- Java设计模式学习笔记三
- (转)协议森林04 地址耗尽危机 (IPv4与IPv6地址)
- File判断功能(新手)
- git常用命令学习配详细说明
- Mol Cell Proteomics. | Elevated Hexokinase II Expression Confers Acquired Resistance to 4-Hydroxytamoxifen in Breast Cancer Cells(升高的己糖激酶II表达使得乳腺癌细胞获得对他莫昔芬的抗性)(解读人:黄旭蕾)