前提是表格本質上可以加入內,因爲where子句排除不匹配,只是究竟有多糟的所有記錄用以下2查詢語句的語法風格第一:的TABLE1 T1,T2 TABLE2 WHERE T1.Blah = T2.Blah - VS - INNER JOIN
SELECT {COLUMN LIST}
FROM TABLE1 t1, TABLE2 t2, TABLE3 t3, TABLE4 t4 (etc)
WHERE t1.uid = t2.foreignid
AND t2.uid = t3.foreignid
AND t3.uid = t4.foreignid
etc
代替
SELECT {COLUMN LIST}
FROM TABLE1 t1
INNER JOIN TABLE2 t2 ON t1.uid = t2.foreignid
INNER JOIN TABLE3 t3 ON t2.uid = t3.foreignid
INNER JOIN TABLE4 t4 ON t3.uid = t4.foreignid
我不知道這是否是有限的微軟SQL,甚至是特定的版本,但我理解是第一種情況是全外連接使所有可能的相關性都可以訪問。
我已經在過去使用第一種方法來優化訪問兩個顯著大數據的存儲,每個具有外圍表查詢加入他們,與那些產品加入後期走到一起查詢。通過允許每個「較大」表中的加入到它們各自的查找表,並且只結合每個較大的表中的一個特定子集,我發現有超過引入大表來之前彼此特定的過濾是顯着的速度提升。
在正常情況下(簡單連接)的情況下,使用第二種場景會不會更好?我發現它更容易閱讀,看起來會更快。
我不會用來優化,有辦法做你所描述的使用派生表的例子或通過改變連接順序。 – HLGEM 2009-09-29 22:05:05