SQL查询包含冗余的Where和On条件 - 它们是有目的还是它们会减慢查询速度?

时间:2017-09-22 15:57:30

标签: sql

我正在编辑SQL查询,并遇到了一个大致类似于以下内容的部分:

SELECT 
    userAddress, employeeAddress, userSSNumber,  
    employeeSSNumber, customerSSNumber, userID, employeeWorkHours, 
    YTDHoursWorked, employeeHireDate
FROM  
    Users
LEFT OUTER JOIN 
    Customers ON customerSSNumber = userSSNumber
LEFT OUTER JOIN 
    (SELECT 
         employeeAddress AS Address,
         ISNULL((SELECT SUM(employeeWorkHours) 
                 FROM Employees AS TempLines 
                 WHERE TempLines.employeeSSNumber = Employees.employeeSSNumber 
                   AND Templines.employeeHireDate < Employees.employeeHireDate), 0) AS YTDHoursWorked 
     FROM
         Employees) AS Records ON employeeAddress = Address

我怀疑那些部分

where TempLines.employeeSSNumber= Employees.employeeSSNumber

on employeeAddress = Address

完全是多余的。如果我理解正确,他们只是将值与自身进行比较,如果删除这些位,查询将返回相同的结果 - 是吗?

而且,

Templines.employeeHireDate < Employees.employeeHireDate

部分会导致嵌套最多的Select根本不返回任何结果,对吗?

请原谅我的示例中任何不一致的大小写,以及表的糟糕设计和命名约定。由于许多这些可能冗余的部分,实际查询的时间要长得多。它使用这些命名约定,我无法更改任何表或字段。这个问题的一部分是在盯着页面长时间查询几个小时后进行的健全性检查。

1 个答案:

答案 0 :(得分:2)

条款&#34; TempLines.employeeSSNumber = Employees.employeeSSNumber&#34;是相关子查询的一部分。它确保该行的总和仅用于给定的行。