我是靠谱客的博主 害羞鼠标,最近开发中收集的这篇文章主要介绍【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语句逻辑相同,性能却差异巨大?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部