2013-03-27 97 views
10

我想知道哪一個最適合於下面所述的兩個查詢之間的性能,還是它們的性能相同?查詢性能INNER JOIN ON和比較

第一個:[未經WHERE子句,只是並與]

SELECT related_tabid AS tabid, label, t.name 
    FROM relatedlists r 
    INNER JOIN tab t 
     ON t.tabid = r.tabid 
      AND t.name = 'Leads' 
      AND r.is_active=1 and r.related_tabid <> 0 
      AND t.is_active=1 
    ORDER BY label 

二之一:

SELECT related_tabid AS tabid, label, t.name 
    FROM relatedlists r 
    INNER JOIN tab t 
     ON t.tabid = r.tabid 
     WHERE t.name = 'Leads' 
      AND r.is_active=1 and r.related_tabid <> 0 
      AND t.is_active=1 
    ORDER BY label 

回答

5
[使用WHERE子句,並與其中代替ON相關聯]

這兩個查詢都是相同的,因爲使用的連接是INNER JOININNER JOIN基本上它只過濾在另一個表上至少有一個匹配的行。即使兩個表互換,結果仍然是一樣的。

但是,如果你通過LEFT JOIN加入他們,這兩個查詢是不同的,並會產生不同的結果。

+0

感謝您的回覆。如果我使用'LEFT JOIN'哪一個在性能上更快? – Rashidul 2013-03-27 09:11:16

+0

一個很好的文章爲您的問題:[INNER JOIN vs LEFT JOIN performance](http://stackoverflow.com/questions/2726657/inner-join-vs-left-join-performance-in-sql-server) – 2013-03-27 09:14:27

1

它在我看來,這兩個查詢之間的唯一區別是其中一個在WHERE子句中有t.name = 'Leads',另一個在JOIN子句中有。正確?

兩者沒有區別。 SQL優化器將同樣處理它們。做一個解釋他們每個人來驗證。

+0

是的,兩者都是一樣的。謝謝 – Rashidul 2013-09-09 05:43:15

0

理論上,第一個查詢只是希望將文本比較放在'where'中,然後加入表的聯合'邏輯'的定義,'where'僅用於指定值在比較時變化 其中t.name ='Leads'; 關於