在我们平常写sql的时候,in和exists这两个关键词会经常用到,所以我们有必要对它们的性能作一个分析。
[in和exists性能分析]
1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大时,即数据量T1 << T2 时,1) 的查询效率高。
2) select * from T1 where T1.a in (select T2.a from T2) ;
T1数据量非常大而T2数据量小时,即数据量T1 >> T2 时,2) 的查询效率高。
简而言之,一般来说:外表大,用IN;内表大,用EXISTS。如果查询的两个表大小相当,那么用in和用exists基本没什么区别。
[not in和not exists性能分析]
如果查询语句用到了not in, 那么内外表都进行全表扫描,没有用到索引。
而not exists的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。
时间: 2024-11-03 22:32:42