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。
如果查詢的兩個表大小相當,那麼用這兩者的差別其實不大。
全站熱搜
留言列表