我是靠谱客的博主 害羞鼠标,这篇文章主要介绍【MySQL】SQL语句逻辑相同,性能却差异巨大?,现在分享给大家,希望可以做个参考。

学习于极客时间

第一,对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。


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语句逻辑相同内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(126)

评论列表共有 0 条评论

立即
投稿
返回
顶部