mysql in查询走索引么_SQL IN 一定走索引吗?

摘要

IN 一定走索引吗?那当然了,不走索引还能全部扫描吗?好像之前有看到过什么Exist,IN走不走索引的讨论。但是好像看的太久了,又忘记了。哈哈,如果你也忘记了MySQL中IN是如何查询的,就来复习下吧。

问题

问题要从之前的统计店铺数关注人数说起

SELECT shop_id, count(user_Id) as attentionNumber

FROM shop_attention

WHERE shop_id IN

#{shopId}

GROUP BY shopId

复制代码

当时是从缓存的角度来分析如何进行优化。有兴趣看这篇微服务化后缓存怎么做

将这个查询收敛,应用端做了缓存后,确实没什么大问题了。但是随着店铺关注数的增加,慢SQL开始出现了

在我们的业务中,将100ms的SQL查询定义为慢查询,需要优化的。优化不了必须要控制查询频次。同时超过5s的数据库操作会被kill掉,防止拖垮整个数据库,导致相关应用都受到牵连。

该SQL执行时间耗时已经几百ms了,必须要优化了。阿里云对这个SQL的检测报告时

扫描行数和返回行数比例超过了100

使用了group_by函数,注意检查group_by是否用到了索引

分析

首先可以确定的是,group by 的shop_id字段肯定是建了索引的,那么扫描行数和返回行数比例为什么这么大呢?

先复习下分析查询语句的三大要素

响应时间,意思很明确,不多解释了

扫描行数 整个查询过程中扫描了多少行

返回行数 查询结果命中的行数<

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值