美文网首页
别被骗了,mysql中SQL中的or也是可以走索引的

别被骗了,mysql中SQL中的or也是可以走索引的

作者: primopeng | 来源:发表于2020-06-09 09:31 被阅读0次

今天,线上数据库发现一个慢SQL,内容如下:

image.png

创建索引如下:

image.png

用explain来看下sql的执行计划:

image.png

结果发现sql没有按照预期的索引第一个索引执行,此时的执行时间为0.77。原本希望通过第一个索引过滤一多半的数据,可是mysql的执行器没有选择第一个索引。

突然想起之前看到的帖子说,mysql中or语句会导致索引失效。如果按目前的状况确实这样,第一个索引确实可以过滤更多的数据,但是mysql的sql执行器确实没有选择走第一个索引。难道真的这样吗?有点不相信,我再想是不是因为没有建组合索引才导致他不走第一个索引,于是我将第一个索引建成del_flag,voucher_id和carry_over_voucher_id的组合索引。修改后索引如下:

image.png

再次查看sql的执行计划:

image.png

结果依旧。唉,死马当作活马医吧,把or条件连接的字段单独建立索引试下。索引修改如下:

image.png

查看sql的执行计划:

image.png

结果意外,sql不仅使用第一个索引也使用了最后一个索引,SQL的执行时间也有之前的0.77S提升到0.058S。

相关文章

  • 别被骗了,mysql中SQL中的or也是可以走索引的

    今天,线上数据库发现一个慢SQL,内容如下: 创建索引如下: 用explain来看下sql的执行计划: 结果发现s...

  • 索引

    MYSQL索引 MYSQL中索引文件以B树结构存储,索引可分为单列索引和多列索引。 对于多列索引中,当一个SQL语...

  • mysql索引篇之explain命令介绍

    mysql中的explain命令可以用来查看sql语句是否使用了索引,用了什么索引,有没有做全表扫描。可以帮助我们...

  • SQL语言之索引

    SQL语言之索引 前言 本章我们将学习MySQL中的索引,本文将从索引的作用、索引的分类、创建索引的语法、索引的使...

  • mysql的唯一索引字段可以为null吗

    在sql server中,唯一索引字段不能出现多个null值 在mysql 的innodb引擎中,是允许在唯一索引...

  • MySQL实现Oracle中的函数索引

    对于带有列的函数计算的SQL,MySQL 是无法使用索引的,MySQL并没有Oracle中的函数索引,例如: 在O...

  • mysql实现oracle函数索引

    对于带有列的函数计算的SQL,MySQL 是无法使用索引的,MySQL并没有Oracle中的函数索引,例如: 在O...

  • 索引优化笔记!

    mysql最左匹配原则如果sql语句中用到了组合索引中的最左边的索引,那么就可以利用这个组合索引去进行匹配 mys...

  • 好程序员Java培训分享SQL语言之索引

    好程序员Java培训分享SQL语言之索引,前言:本章我们将学习MySQL中的索引,本文将从索引的作用、索引的分类、...

  • 使用Mysql遇到的问题

    mysql使用错误索引问题(待完善)sql语句为: 表中建立的索引为: explain看的使用的结果为: 使用索引...

网友评论

      本文标题:别被骗了,mysql中SQL中的or也是可以走索引的

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