SQL中我們常用IN的子查詢來查詢資料,如下:

SELECT * FROM A WHERE A_COLUMN IN (SELECT B_COLUMN FROM B)

但這種寫法資料一多時,效能的問題就顯現出來了。

 

可以使用 EXISTS 來改善此問題,改寫如下:

SELECT * FROM A WHERE EXISTS (SELECT * FROM B WHERE A_COLUMN=B_COLUMN)

執行效能差異很有感,終於不用轉到天荒地老...

因為EXISTS是依主查詢後的結果直接代入驗證,再決定輸不輸出此筆資料;IN則是撈出大量資料後,才去一一比對。

 

不是說IN不好,而是要看當下SQL架構:

主表(外)小子表(內)大適合用EXISTS,而主表(外)大子表(內)小適合用IN

如果查詢的兩個表大小相當,那麼用這兩者的差別其實不大。

arrow
arrow
    全站熱搜

    Smïlë 發表在 痞客邦 留言(0) 人氣()