对表名使用ALIAS有任何性能问题

时间:2015-03-12 04:15:24

标签: sql sql-server sql-server-2008

我们说我有两张桌子

Table : Department 
Columns 
1) DeptID 
2) DeptName

Table : Employee 
Columns 
1) EmpID
2) EmpName
3) DeptID

当我在这两个表上应用联接时,我必须使用Employee.DeptID = Department.DeptID

现在我重组我的桌面设计,现在我的桌子将如下所示:

Table : Department 
Columns 
1) DeptID 
2) DeptName

Table : Employee 
Columns 
1) EmpID
2) EmpName
3) Emp_DeptID

现在使用这些列名称我不必使用ALIAS,我只需使用DeptID = Emp_DeptID

我的问题是,使用ALIAS无论如何都会阻碍查询性能?

1 个答案:

答案 0 :(得分:0)

实际上,您的问题中的示例都没有使用别名。

考虑以下片段:

1. FROM Department, Employee WHERE DeptID = emp_DeptID

2. FROM Department, Employee WHERE Department.DeptID = Employee.emp_DeptID

3. FROM Department AS D, Employee AS E WHERE D.DeptID = E.emp_DeptID

示例#3使用别名。别名用于为查询中的关系分配临时替代名称。使用它们有两个原因:1)在必须多次键入表名时减少键入并提高清晰度2)在查询中多次使用相同关系时消除歧义(在自连接或关联子中)例如,查询。)

示例2只使用完全限定的列名,但这些不是表别名。

示例1是我必须承认的对我来说不熟悉的事情;如果JOIN条件中的列名仅从一个关系明确可用,则不需要使用关系名称限定它们。经过几十年的始终符合条件的加入条件,对我来说感觉“错误”。危险在于,您将来可能会在其中一个关系中添加一个具有相同名称的列,从而导致查询失败(或者更糟糕的是,返回不正确的结果)。但我承认并不总是对所选列列表中的列名进行限定并且遭受同样的危险,所以我认为我只是习惯性地说话。

哦,并回答你的原始问题:通过包含表名完全限定可能会对查询分析器产生微小的积极影响(将SQL转换为可执行查询计划)。那是因为你没有强迫分析仪为你做资格鉴定。但与实际执行查询所花费的时间相比,这种影响可能太小而无法衡量。