在join和where子句之后写入过滤条件有什么区别?

时间:2016-03-07 10:37:06

标签: sql sql-server

以下查询之间有什么区别

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'

我在性能方面提出要求。 以上如何使用表格中的大量数据查询性能

1 个答案:

答案 0 :(得分: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正在执行表扫描,因此您可能希望更改它。