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...