MYSQL数据库SQL语句中的not in 优化

本文探讨了SQL语句中IN和NOT IN子查询在大数据量情况下的性能问题,并介绍了如何通过左连接来优化NOT IN语句,显著提高查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL语句中的IN和NOT IN子查询理解起来很直观,和实际的业务也很匹配,所以经常会被开发人员使用,如果是数据量不大的表还好,如果数据量较大的话就会出现性能问题。所以就需要对not in 语句进行优化。

例如现在有一条sql:


SELECT count(*) FROM  yong_hu_sheng_qing q WHERE q.isdelete=0 AND q.id not in ( (SELECT sq_id FROM process_control  WHERE succeed_time is null AND is_delect=0  GROUP BY sq_id))

该条sql的查询时间

大概3秒左右了,这在实际开发中是不能容忍的。查阅文档发现还可以用NOT Exists ,于是修改成NOT Exists再尝试一下。

修改成 NOT Exists后,发现提升的效率几乎可有可无。这个时候咱们可以选择使用 左连接,例如:

SELECT count(*) FROM  yong_hu_sheng_qing q left JOIN ((SELECT sq_id FROM process_control  WHERE succeed_time is null AND is_delect=0  GROUP BY sq_id)) a ON q.id=a.sq_id  WHERE q.isdelete=0  AND a.sq_id is null 

 

可以看出 效率大大的 提高了。以后碰到用not in, NOT Exists满足不了的小伙伴,可以尝试写这种方法。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值