ORACLE 中IN和EXISTS比較
ORACLE 中IN和EXISTS比較
--先記下來,回頭驗證下
EXISTS的執行流程
select * from t1 where exists ( 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的效能區別:
如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in,反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。
其實我們區分in和exists主要是造成了驅動順序的改變(這是效能變化的關鍵),如果是exists,那麼以外層表為驅動表,先被訪問,如果是IN,那麼先執行子查詢,所以我們會以驅動表的快速返回為目標,那麼就會考慮到索引及結果集的關係了
另外IN時不對NULL進行處理
如:
select 1 from dual where null in (0,1,2,null)
為空
從效能上來看
exists是用loop的方式,迴圈的次數影響大,外表要記錄數少,內表就無所謂了
in用的是hash join,所以內表如果小,整個查詢的範圍都會很小,如果內表很大,外表如果也很大就很慢了,這時候exists才真正的會快過in的方式。
not in和not exists的區別
not in內外表都進行全表掃描,沒有用到索引;
not extsts 的子查詢能用到表上的索引。
所以推薦用not exists代替not in
不過如果是exists和in就要具體看情況了
create table build_tab
initrans 3
nologging
as
with generator as (
select --+ materialize
rownum id
from all_objects
where rownum <= 3000
)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28859270/viewspace-765695/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- not in 和 not exists 比較和用法
- Oracle date 型別比較和String比較Oracle型別
- Oracle中exists和in的效能差異Oracle
- Java 中 Comparable 和 Comparator 比較Java
- js 深比較和淺比較JS
- powershell中的where和foreach比較
- Mysql中的Datetime和Timestamp比較MySql
- Oralce 使用SQL中的exists 和not exists 用法詳解SQL
- Go中泛型和反射比較指南Go泛型反射
- etcd和redis比較Redis
- TCP和UDP比較TCPUDP
- Redis 和 Memcached 比較Redis
- Java和JavaSciprt比較Java
- MySQL 中的 distinct 和 group by 的效能比較MySql
- Go和Python比較的話,哪個比較好?GoPython
- VUE中diff比較Vue
- JAVA中的Comparable介面和自定義比較器Java
- Java中的字串操作(比較String,StringBuiler和StringBuffer)Java字串UI
- numpy 中 array 和 matrix 相乘的結果比較
- JAVA中字串比較equals()和equalsIgnoreCase()的區別Java字串
- [pythonskill]Python中NaN和None的詳細比較PythonNaNNone
- 比較器-Comparable和Comparator
- ImageMagic 和 GraphicsMagick 的比較
- ArrayList和LinkedList的比較
- PyTorch和TensorFlow比較 - thegradientPyTorch
- ==和equals方法的比較
- Oracle與PostgreSQL比較:PostgreSQL至少在安裝和大小方面擊敗了Oracle - foersterOracleSQL
- PTSQLServer中exists和except用法介紹wkaSQLServer
- 深入理解PHP之isset和array_key_exists對比PHP
- In和exists使用及效能分析(三):in和exists的效能分析
- Go 與 C++ 的對比和比較GoC++
- Transformer和MoE架構比較ORM架構
- TreeMap和HashMap的元素比較HashMap
- 比較Windows和Linux SQL容器WindowsLinuxSQL
- DB2常用函式與Oracle比較TIDB2函式Oracle
- List中對比Contains, Exists, Any之間的優缺點AI
- DDD中事件與命令比較事件
- Java中List集合效能比較Java
- In和exists使用及效能分析(二):exists的使用