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>='