2016-03-07 48 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正在执行表扫描,因此您可能需要更改该表。

相关问题