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