[SQL] 使用in、exists還是join呢?

  • 32920
  • 0
  • SQL
  • 2016-06-22

SQL幾乎是大多資訊人每天要用的東西, 效能調教上, 使用in、exists或者join效能都差異許多, 該如何使用呢??

In的語法範例如下,

SELECT * FROM Table1 WHERE (c1,c2) IN (SELECT c1,c2 FROM Table2)

exists 範例如下

SELECT Name FROM Table1 
WHERE EXISTS 
   (SELECT * FROM Table2 
    WHERE Table2.sn = Table1.sn AND Name = 'Wheels')

多數人推薦使用Exists

其中的差別在於INDEX FAST FULL SCAN對上INDEX SKIP SCAN.

in並非真的不能使用, 使用情境為:

大表在外小表在內, 使用in.

小表在外大表在內, 使用exists.

若兩表資料數量差異不大, 或者兩表都很龐大, 建議使用join.

 

小表的資料數量 < 大表資料數量的一半   就適用以上條件判定.