IN 和 EXISTS的區別
select * from t1 where t1.a in (select t2.a from t2)
select * from t1 where exists (select 1 from t2 where t1.a = t2.a)
簡而言之,一般式:外表大,用IN;內表大,用EXISTS,如此,sql的執行效率會很高
IN 和 EXISTS的執行方式=>
執行方式:
EXISTS:通過使用EXISTS,Oracle會首先檢查主查詢,然後運行子查詢直到它找到第一個匹配項,這就節省了時間。
IN:Oracle在執行IN子查詢時,首先執行子查詢,並將獲得的結果列表存放在一個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起,待子查詢執行完畢,存放在臨時表中以後再執行主查詢。這也就是使用EXISTS比使用IN通常查詢速度快的原因。