2016-03-07 50 views
2

有什麼區別之間以下查詢在連接和where子句之後寫入過濾條件有什麼區別?

Select E.EmployeeCode,E.Name,D.DepartmentCode,D.DepartmentName 
From Employee E 
inner join Department D on D.DepartmentID=E.DepartmentID 
Where e.EmployeeType='Developer' 

Vs的

Select E.EmployeeCode,E.Name,D.DepartmentCode,D.DepartmentName 
From Employee E 
inner join Department D on D.DepartmentID=E.DepartmentID And e.EmployeeType='Developer' 

我要求在性能方面。 如何上面的查詢performe在表

+3

當你進行內部連接時,完全沒有區別。 (當談到外部連接,他們有不同的結果...) – jarlh

+5

這是流行的問題,有這樣的幾個線程。例如:http://stackoverflow.com/questions/1018952/condition-within-join-or-where –

+0

對於外部連接可能會有顯着差異。對於條件放置不影響結果的情況,這只是一種風格和個人偏好問題。與我建議放置在'where'中的連接本身條件無關。像你的'employeetype ='developer''。這與加入無關,有點令人困惑。就像你忘了一些東西,或者實際上想要一個「左連接」。 –

回答

3

對於INNER JOIN沒有差別巨大的數據。每個查詢的執行計劃是相同的。

SQL Execution Plan

第一方案是用於查詢:

Select E.EmployeeCode,E.Name,D.DepartmentCode,D.DepartmentName 
From Employee E 
inner join Department D on D.DepartmentID=E.DepartmentID 
Where e.EmployeeType='Developer' 

而第二方案是用於查詢:

Select E.EmployeeCode,E.Name,D.DepartmentCode,D.DepartmentName 
From Employee E 
inner join Department D on D.DepartmentID=E.DepartmentID And e.EmployeeType='Developer' 

因此任一查詢的性能將是相同的。

對於「巨大」數據,您可能需要在WHEREJOIN條件中使用的列上的索引,具體取決於這些列中值的唯一性。在截圖中的查詢計劃中,您可以看到SQL Sever正在執行表掃描,因此您可能需要更改該表。

相關問題