使用exists代替in

2021-09-25 07:04:10 字數 597 閱讀 8598

select *

from class_a

where id in ( select id from class_b);

select *

from class_a a

where exists  ( 

select * 

from class_b b

where a.id = b.id

);

分析

上述兩種方法查詢結果一樣,但exists 方式速度要快。分析如下:

如果連線列id 上有索引,那麼查詢class_b時,無需查詢實際表,僅需要查索引就可以了。

使用exists ,那麼只有查到一行資料滿足條件就會終止查詢,不會產生臨時表。

使用in查詢時,資料庫首先會執行子查詢,然後將結果儲存在臨時表中,然後掃瞄整個臨時表,很多情況下非常耗費資源。

總結

exists 方式查詢 比 in 方式查詢效率高,但in 可讀性較好。建議盡可能使用exists方式,避免使用子查詢,除非in 的引數為數值列表

sql優化必會 exists代替in改寫sql

概述 一般在做sql優化的時候講究使用exists帶替代in的做法,理由是exists執行效率要比in高。個人理解 in表示範圍,指某一字段在某一範圍之內,這個範圍一般使用子查詢來獲取,由此可知in子查詢返回的結果應該就是這個範圍集。exists表示存在,指至少存在一處,這個條件由exists子查詢...

使用Join代替In

我們知道,在sql中使用in讓我們的where子句可以規定多個值。當需要從乙個集合中查詢包含某幾個值的記錄的時候,通常我們會選擇使用in來實現,其實,使用join也可以實現這樣的功能,而且效能要比in好。我會從以下幾個方面來進行總結。使用in和join的效能對比 ef中如何使用join來代替in 首...

關於exists 的使用

近來幹活時發現對同事寫的用exists的sql看不很懂,在網上蒐集了些資料學習學習。下面這些說法不見的都對,有不對的地方請高手指正。1 exists 字面意思存在。exists裡的子查詢結果集非空,exists 子句的值就是true。exists裡的子查詢結果集為空,exists 子句的值就是fal...