IN 和EXISTS
IN 是把外表和内表作hash连接,而EXISTS是对外表作loop循环,每次loop循环再对内表进行查询。EXISTS比in效率高的说法是不正确的。如果查询的两个表大小相当,那么用in和EXISTS差别不大。
如果连个表中一个较大,一个是小表,则子查询表达的用EXISTS,子查询表小的用in。
例如:表Athor(小表),表Winner(大表)
SELECT * FROM Athor AthorCode in (select AthorCode from Winner)
效率低,用到了Athor的索引
SELECT * FROM Athor EXISTS(select AthorCode from Winner WHERE Athor.AthorCODE=Winner.AthorCODE)
效率高,用到了Winner 的索引
not in 和not exists
如果查询语句使用了not in 那么内外表都进行了全表扫描,没有用到索引;而not exists的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in 要快。
NOT IN
select AthorCode,AthorName
from Athor
where AthorCode not in (
select AthorCode
from Winner)
NOT EXISTS
select AthorCode,AthorName
from Athor AS A
where NOT EXISTS(
select AthorCode
from Winner AS B
where A.AthorCode=B.AthorCode)
LEFT JOIN
select A.AthorCode,AthorName
from Athor AS A Left join Winner B
ON A.AthorCode=B.AthorCode
WHERE B.WinnerDate IS NOT NULL
分享到:
相关推荐
“exists”和“in”是Oracle中,都是查询某集合的值是否存在在另一个集合,但对不同的数据有不同的用法,主要是在效率问题上存在很大的差别,以下有两个简单例子,以说明 “exists”和“in”的效率问题。
oracle in和exists性能解析
in和exists的区别与执行效率问题解析
如果两张表大小差不多,那么exists和in的效率差不多。 例如: 一张大表为A,一张小表B 一、第一种情况 select * from A where mm in (select mm from B) 效率高,这里用到的是大表A上的索引 select * from B ...
“exists”和“in”的效率问题,不同的语句exists和in效率有所不同
分析了SQL查询中in和exists的区别,有需要的朋友可以参考一下
一个是问in exist的区别,一个是not in和not exists的区别
里面自己根据网上的资源整理出来的一份sql中in,exists,not in,not exists的使用方法以及注意事项等,有助于初学的朋友们借鉴。
Oracle 中 EXISTS 和 IN 的效率问题详解 EXISTS 和 IN 都是 Oracle 中的集合操作符,但它们在使用和执行效率上有所不同。本文将深入探讨 EXISTS 和 IN 的使用场景、执行机制和效率问题。 EXISTS 的使用场景和机制 ...
MySQL优化之in,exists,not in,not exists的区别in与existsin查询过程结论:exists查询过程:结论:not in与not existsnot in查询过程:结论:not exists查询过程:结论: 首先我们使用两个用户表作为实例 insert ...
SQL语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句.txt欢迎下载!
select null from t2 where y = x ) 可以理解为: 代码如下: for x in ( select * from t1 ) loop if ( exists ( select null from t2 where y = x.x ) then OUTPUT THE RECORD end if end loop 对于in 和 ...
关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in...
最近在写SQL语句时,对选择IN 还是Exists 犹豫不决,于是把两种方法的SQL都写出来对比一下执行效率,发现IN的查询效率比Exists高了很多,于是想当然的认为IN的效率比Exists好,但本着寻根究底的原则,我想知道这个...
in与exists之争(11g).sql