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.
小表的資料數量 < 大表資料數量的一半 就適用以上條件判定.