开发大佬扔过来的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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




