2014-12-04 55 views
0

我只想知道哪個連接會更快。哪個連接更快:1個鍵+硬編碼與2個鍵

通常,表A的2個鍵列連接到表B的2個鍵列,全部都被索引。

兩個表格基於萬行級別。

應該是這樣的:

select * 
from A 
left join B 
on A.key1=B.key1 
and A.key2=B.key2 
.............. 
.............. 

但是,如果我想在key2特定鍵值,key2='AA'這會更快:

計劃A:

select * 
from A 
left join B 
on A.key1=B.key1 
and A.key2=B.key2 
where A.key2='AA' 

B計劃:

select * 
from A 
left join B 
on A.key1=B.key1 
where A.key2='AA' and B.key2='AA' 

謝謝

+1

爲什麼你不檢查執行計劃....?話雖如此,我認爲他們兩人將是一樣的。 – Hatsjoem 2014-12-04 18:37:58

+0

選擇*查看執行計劃* – 2014-12-04 18:38:02

回答

0

電話的唯一明確的方法將是嘗試兩種方式並衡量它們。 IT將取決於可用的索引以及優化器如何決定使用它們。

如果在每個表上有(key1, key2)的複合索引,我認爲如果有任何差異,則加入+過濾器會更快。如果只有key1的指數,我預計性能幾乎相同。

1

這兩個查詢是不等效

當您將LEFT JOIN ed表中的列放入WHERE子句中時,您將其設置爲INNER JOIN。如果B中沒有匹配的記錄,您將不會從A獲得記錄。

你的選擇是使用它的WHERE子句中你是在第一個選項,或者把它放到JOIN

left join B 
on A.key1=B.key1 
AND a.Key1 = 'AA' 

...而這又是大多數RDBMS相同的執行計劃。

作爲可讀性的一個規則,您希望在WHERE子句中使用此語句,因爲這是下一個人查找過濾器的地方。