資料庫sql exists和in的區別

2021-10-02 23:37:19 字數 524 閱讀 3870

exists和in

in 是把外表和內錶作hash join,而exists是對外表作loop,每次loop再對內表進行查詢。

如:

a:select * from t1 a where exists (select * from t2 b where b.id = a.id)

b:select * from t1 a where a.id in (select b.id from t2 b)

對於a,用到了t2上的id索引,exists執行次數為t1.length,不快取exists的結果集。

對於b,用到了t1上的id索引,首先執行in語句,然後將結果快取起來,之後遍歷t1表,將滿足結果的加入結果集,所以執行次數為t1.length*t2.length次。

因此對t1表大t2錶小的情況使用in,t2錶小t1表大的情況使用exists

**不管t1和t2大小如何,均使用exists效率會更高。**

sql exists和in的區別

1.in或not in 裡面不能有null,否則會得不到結果 exists在子查詢中使用null仍返回結果集。2.exists 子查詢是乙個受限的select語句 不允許有compute和into 結果型別為boolean 若子查詢包含行,則返回true in確定給定的值是否與子查詢或列表中的值相匹...

列式資料庫和行式資料庫

列式資料庫 是以列相關儲存架構進行資料儲存的資料庫,主要適合於批量資料處理和即時查詢。相對應的是行式資料庫,資料以行相關的儲存體系架構進行空間分配,主要適合於小批量的資料處理,常用於聯機 事務型資料處理。優點 缺點 資料庫以行 列的二維表的形式儲存資料,但是卻以一維字串的方式儲存,例如以下的乙個表 ...

關聯式資料庫和Not only sql資料庫

當前主流的關係型資料庫有oracle db2 microsoft sql server microsoft access mysql等。非關係型資料庫有 nosql cloudant。nosql和關係型資料庫比較?優點 1 成本 nosql資料庫簡單易部署,基本都是開源軟體,不需要像使用oracle...