美文网首页
为什么你的sql性能这么差?

为什么你的sql性能这么差?

作者: 三不猴子 | 来源:发表于2020-08-27 00:24 被阅读0次

为什么你的sql性能这么差?

我们都知道有些情况下是不会走索引的所以性能会比较差,但是你知道为啥这些情况不走索引吗?下面我们一一看一下为啥他性能这么差。

条件字段函数操作

为什么对字段做了函数计算,就用不上索引了?我们首先想一下为什么索引具有快速定位的能力,索引之所以能够快速定位,是因为索引维护了一个顺序,对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。 举个栗子🌰 select * from t where created ='2020-08-26' 假设在created上创建了索引,MySQL可以根据索引的顺序快速定位到,如果是这么写的话就不行了select * from t where month(created)=7,因为MySQL不可能将created转换成月份然后在排序,所以优化器选择不走索引。

隐式类型转换

假设我们有一个varchar类型的字段,我们在写where条件时写的是int,此时我们用explain可以看到走的是全表扫描,那这是为什么呢?

select * from t where test=1234;其中test是varchar类型,其实这个语句等价于select * from t where CAST(test AS signed int) = 1234;所以你现在知道为啥不会走索引了吧。

隐式字符编码转换

假设我们有一条sqlselect t2.* from t1, t2 where t1.id= t2.t1_id and t2.id=2;其中t1,和t2的id都是主键自然都是有索引的,但是用explain发现 这个分了两步, t2.id=2这步使用了索引,第二步根据t2.id=2查出来的内容去匹配t1的时候却没有走索引?那是为什么呢?其实是因为t1 和t2 两张表用的不是同一种字符集,如果一个是utf8一个是utf8mb4,里面隐含了一个CONVERT()函数,在这里的意思是把输入的字符串转成utf8mb4字符集。所以不走索引。

相关文章

  • 为什么你的sql性能这么差?

    为什么你的sql性能这么差? 我们都知道有些情况下是不会走索引的所以性能会比较差,但是你知道为啥这些情况不走索引吗...

  • 丁奇-MySQL实战读书笔记18

    为什么这些SQL语句逻辑相同,性能却差异巨大? SQL逻辑相同,性能差异较大的,通过老师所讲学习到的,和平时碰到的...

  • MySQL索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降...

  • [转]MySQL索引优化分析

    为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引...

  • MySQL正确使用索引

    需要解决的问题 知道sql为什么会走索引? 为什么有些sql不走索引? sql会走那些索引,为什么会这么走? In...

  • MySQL之explain

    在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算...

  • SQL语句的优化

    SQL语句的优化 如何索取有性能问题SQL的渠道 通过用户反馈获取存在性能问题的SQL 通过慢查日志获取存在性能问...

  • SQL语句的优化

    SQL语句的优化 如何索取有性能问题SQL的渠道 通过用户反馈获取存在性能问题的SQL 通过慢查日志获取存在性能问...

  • SQL查询优化

    如何获取有性能问题的SQL 通过用户反馈获取存在性能问题的SQL 通过慢查日志获取存在性能问题的SQL 实时获取存...

  • 干货系列——SQL语句的优化

    SQL语句的优化 如何索取有性能问题SQL的渠道 通过用户反馈获取存在性能问题的SQL 通过慢查日志获取存在性能问...

网友评论

      本文标题:为什么你的sql性能这么差?

      本文链接:https://www.haomeiwen.com/subject/ecuqsktx.html