暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL执行,更偏爱选择什么索引呢

MySql星探 2021-04-07
512

   开发大佬扔过来的SQL,SQL如下,说执行速度很慢

   

     我一看执行计划,确实是表结构中缺少索引,只有promo_dtl_id这个字段的索引,这个扫描行数有几十万行,直接加readed_ind、promo_comp_typ、attribute1这三个字段的索引,速度瞬间提升N个级别,秒出结果

      也许你会想,这个应该已经结束了吧,第二天,开发同事说,这个SQL没有走昨天的复合索引了,而是又回到了走这个promo_dtl_id字段的索引,太奇怪了吧,他给过来的SQL是这样的

初一看,一模一样,仔细一看,有点不对,标红的地方多出了几个值,那是什么原因呢,其实是你这些多余的值影响了SQL的执行顺序,一般来讲,是先执行where条件,在执行order by,然后在执行limit  ,但是这次他是优先执行了order  by  limit    ,所以导致了不走复合索引

  

      但是你在深入一想,其实是order  by   limit  复合导致了这个问题,去掉order  by ,就走了复合索引,本文只是抛砖引玉,更多的深入探讨可以后续再深究

     

      一起探讨,一起成长,感谢大家的支持

文章转载自MySql星探,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论