數據庫優化

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通常查詢速度快的原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章