求优化一句sql语句,not in速度太慢了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求优化一句sql语句,not in速度太慢了相关的知识,希望对你有一定的参考价值。

select tbl1.id from table1 tbl1 where tbl1.id not in (select tbl2.id from table2 tbl2);

tbl1有9万条数据,tbl2有3万条数据

参考技术A 有俩种方法可以提高查询效率, 1、 用not exists 代替 not in , 这种发法没有改变查询数据的形式,所以可能效果不明显。 2、 利用索引查询, select tbl1.id from table1 tbl1 left join table2 tbl2 on tbl1.id = tbl2.id where tbl2.id = null; 这个是把table2表过滤,查询直接找索引。 参考技术B 使用not exists 代替 not in
select tbl1.id from table1 tbl1 where not exists (select 1 from table2 tbl2 where tbl1.id = tbl2.id);
参考技术C 使用not exists 代替 not in 参考技术D 那就用 not exists 第5个回答  推荐于2017-11-25 两种方案:
1、分别给两表的id加索引(效果显著)
2、不用子查询
select tbl1.id from table1 tbl1 left join tbl2 on tbl1.id=tbl2.id
where tbl2.id is null本回答被提问者和网友采纳

SQL优化- in和not in

in不会导致索引失效,但最终数据库会将in语句解析为or语句,eg:

select * from T_MAIN_PROCESS t where t.audit_status_code in (‘05‘,‘07‘)。 查看执行计划会被解析成:

select * from T_MAIN_PROCESS t where t.audit_status_code=‘05‘ or t.audit_status_code=‘07‘

所以:可用or代替in,减少数据库解析in语句时间。

 

not in 会导致索引失效。所以

以上是关于求优化一句sql语句,not in速度太慢了的主要内容,如果未能解决你的问题,请参考以下文章

sql语句多表联查,查询速度太慢,超过10s,由于是菜鸟,不知道怎样优化

在 sql 查询中使用 not in 时优化此 SQL 语句的最佳方法是啥?

SQL优化- in和not in

sql 语句中in ,not in

优化我的mysql语句! - 兰德()太慢了

MySQL视图查询超慢,求解答