mysql 优化查询in_MySQL中where条件中IN的慢查询优化

文章介绍了MySQL中WHERE条件使用IN子查询导致的慢查询问题及两种优化方法。优化方式一是通过LEFT JOIN替代IN,优化方式二是结合HAVING子句进行过滤。这两种方式显著提升了查询效率,将查询时间从分钟级降低到秒级。
摘要由CSDN通过智能技术生成

MySQL中where条件中IN的慢查询优化

我们在编写SQL查询语句时,有时候会遇到连表查询的情况,有时的业务场景为,要查询满足某种条件的一系列id的数据。

优化方式一:

示例:查询出指定时间之后凡是上传过图片的用户所在的镇和镇的管理员名。这种优化方式是另外一个博主那里借鉴过来的。

SQL:

SELECT DISTINCT user_name,town_name FROM t_farmers WHERE id IN

(SELECT DISTINCT farmer_id FROM t_farmers_images WHERE create_time>='2017-07-05')

---------------------

作者:pengyufight

来源:CSDN

原文:https://blog.csdn.net/pengyufight/article/details/77523404

版权声明:本文为博主原创文章,转载请附上博文链接!

这样查询的话,速度相当的慢,其中farmers表有六千多记录,farmers_images表有近20万条记录,这样的场景,可能都要查询10几分钟,IN能否让索引失效要看数据库的版本和查询的条件。解决办法是使用左连接或右连接来连表查询,这样的查询是秒级的。

SQL:

SELECT DISTINCT b.user_name,b.town_name FROM (SELECT DISTINCT farmer_id FROM t_farmers_images WHERE create_time>='

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值