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

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的查询时间MYSQL数据库SQL语句中的not in 优化_第1张图片

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

MYSQL数据库SQL语句中的not in 优化_第2张图片

修改成 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 

 MYSQL数据库SQL语句中的not in 优化_第3张图片

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

 

 

 

你可能感兴趣的:(数据库,MySQL)