概述
学习于极客时间
第一,对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。
mysql> select count(*) from tradelog where
-> (t_modified >= '2016-7-1' and t_modified<'2016-8-1') or
-> (t_modified >= '2017-7-1' and t_modified<'2017-8-1') or
-> (t_modified >= '2018-7-1' and t_modified<'2018-8-1');
第二,隐式类型转换,在 MySQL 中,字符串和数字做比较的话,会将字符串转换成数字。
第三个例子是隐式字符编码转换,由于字符集编码不同,要求在索引字段上做函数操作而导致了全索引扫描。
MySQL 的优化器确实有“偷懒”的嫌疑,即使简单地把 where id+1=1000 改写成 where id=1000-1 就能够用上索引快速查找,也不会主动做这个语句重写。
因此,每次你的业务代码升级时,把可能出现的、新的 SQL 语句 explain 一下,这是一个很好的习惯。
最后
以上就是害羞鼠标为你收集整理的【MySQL】SQL语句逻辑相同,性能却差异巨大?的全部内容,希望文章能够帮你解决【MySQL】SQL语句逻辑相同,性能却差异巨大?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复