oralce中in和exists性能分析

By - Last updated: 星期三, 三月 11, 2015 Leave a Comment

在我们平常写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要快。

灵感记录 是本站开发的一款收藏记录创意分享 ,开启高效之门的在线应用。
点击:【收藏】 收藏此文

发表在 数据库优化 • • ↑Top 文章来源