美文网首页MySQL一问一实验
第34问:我没有让 SQL 使用联合索引,但它不听

第34问:我没有让 SQL 使用联合索引,但它不听

作者: 爱可生开源社区 | 来源:发表于2021-04-02 15:26 被阅读0次
image

问题

这是一个同行问的问题:有一张表,带一个联合索引,SQL 不满足最左匹配,为什么执行计划显示能用到这个联合索引?

叨叨叨

有经验的 DBA 此刻已经知道原因了。

本文立意主要是介绍诊断的方法,方便大家在没有相关知识时找到线索。

实验

起手先来个数据库:

image

造个表:

image

看一下执行计划:

image

看上去确实有点怪,

我们来分析一下:这个 SQL 不满足索引的最左匹配的原则(跳过了 b 列,直接使用 c 列),不应该选择联合索引。但执行计划确实选择了联合索引,可能是优化器在起作用。

我们在实验 27 中介绍过如何诊断优化器的使用,这里我们再来用一次:

image

trace 结果比较长,我们将其放在一个 json 的图形化工具中,然后查找索引的名字 xx,可以找到以下条目:

image

可以看到,MySQL 认为:

  • 联合索引是最优的 covering index

  • 联合索引可能是 range index

继续搜索:

image

可以看到,MySQL 由于代价原因,没有选择联合索引作为 skip scan。

这里涉及了三个概念:covering index、range index、skip scan,我们可能不知道这些概念是什么,稍加搜索就可以获得官方文档的帮助:

https://dev.mysql.com/doc/refman/8.0/en/range-optimization.html#range-access-skip-scan
https://dev.mysql.com/doc/refman/8.0/en/glossary.html#glos_covering_index

剩下的就是靠大家自己推理和实验获得结论:在这个 SQL 中,组合索引被用作 covering index,成为了全表扫描的替代品。

小贴士

如果大家在 MySQL 5.7 中做这个实验,会发现在 optimizer trace 中找不到相关信息。

MySQL 在 8.0 中对优化器信息的披露进行了增强。以后也推荐大家使用新版本来研究特性,能获得更多的有效信息


关于 MySQL 的技术内容,你们还有什么想知道的吗?赶紧留言告诉小编吧!

image

相关文章

  • 第34问:我没有让 SQL 使用联合索引,但它不听

    问题 这是一个同行问的问题:有一张表,带一个联合索引,SQL 不满足最左匹配,为什么执行计划显示能用到这个联合索引...

  • Mysql 索引优化

    联合索引和单个索引选择 对比,值越大越好 强制使用某个索引 使用explain分析索引 1、id:SQL执行的顺序...

  • MySQL数据库查询记录时是否每次只能使用一个索引

    一直以来都没有特别关注单列索引和联合索引的使用区别,今天同事拿个sql来问我优化问题,让我感觉把这方面知识补起来了...

  • Mysql

    索引(一般监控到慢SQL,才会建索引) 前缀索引 常见索引误区 多列联合索引 左前缀例子(是一种联合索引的匹配规则...

  • MySQl优化学习笔记(七)SQL优化简介

    一、SQL优化简介 1、我们平时说的SQL优化就是优化SQl语句和索引(通俗说就是使用什么样的SQL语句能够让索引...

  • SQL语句的优化

    sql语句的优化:多使用共享语句 尽量使你的sql语句能够使用索引。怎样使sql语句能够使用到索引呢:当sql语句...

  • sql中强制使用索引

    在工作中遇到sql查询数据较慢时,用explain查看sql索引,发现添加的索引没有生效,那么可以使用强制索引 但...

  • Mysql慢查询如何优化 --- 2021-09-14

    检查是否走了索引,如果没有则优化sql,使用索引; 检查所使用的的索引,是否是最有索引; 检查所查字段是否都是必须...

  • MySQL - 索引优化技巧

    联合索引 在建立索引的时候,尽量在多个单列索引上判断下是否可以使用联合索引,联合索引使用不仅可以节省空间,还可以更...

  • Mysql数据库查询优化

    用户反馈或者慢查询找出问题sql, 使用Explain分析 1. 索引 没有使用到索引的关联的表, 添加索引. ...

网友评论

    本文标题:第34问:我没有让 SQL 使用联合索引,但它不听

    本文链接:https://www.haomeiwen.com/subject/rwcqkltx.html