關於Exists和inner join 一點討論

2021-08-27 20:18:07 字數 454 閱讀 5999

exists的效率依賴於匹配度。

inner join效率比較穩定。

select * from ta a where exists(select 1 from tb where a.id=b.id)

每掃ta一行,都掃tb,遇到匹配即返回ture,對tb的掃瞄在ta當前行不再繼續下去,如果一直沒找到,就會掃完tb (索引,或表掃)

即是說,匹配度很低,效率就很差。

舉個極端, tb中每行的id都與ta中每行id相同

即 taid1

1111

,,,tbid1

1111

1一掃就有返回,效率極高

反之taid1

1111

11...tbid0

0000

0..每掃ta一行,都要掃完tb,效率極差。

內連線效率則穩定。 在不很清楚實際資料分布情況下,最好用內連線。

關於oracle中in和exists

今天看sql語句的時候發現了exists這個關鍵字,記得剛用這個關鍵字的時候只知道它和關鍵字in的作用是一樣的,當時覺得無非就是我的條件匹配到子結果集裡面的資料。今天打算把這兩個關鍵字具體怎麼回事區分一下,上網上看了一下,懂了一些兩者的區別,其中還涉及到了效能問題,很吃驚!2018 11 8再次更新...

關於oracle中in和exists的區別

一般來說,這兩個是用來做兩張 或更多 表聯合查詢用的,in是把外表和內錶作hash 連線,而exists 是對外表作loop 迴圈,假設有a b兩個表,使用時是這樣的 1 select from a where id in select id from b 使用in 2 select from a ...

關於oracle中in和exists的區別

本文 select from a where id in select id from b 以上查詢使用了in語句,in 只執行一次,它查出b表中的所有id欄位並快取起來.之後,檢查a表的id是否與b表中的id相等,如果相等則將a表的記錄加入結果集中,直到遍歷完a表的所有記錄.它的查詢過程類似於以下...