我用两个表在 oracle 中编写了一个 sql 连接查询。在编写查询时,我没有使用任何表别名来引用 select 子句中的列。现在这是可能的,因为所选列在两个表中具有不同的名称。
所以问题来了;无论两个表中是否有任何相似的列名,是否有必要(从性能的角度)使用表别名来选择列?
请注意:现在我的印象是“如果我们没有指定表别名来选择列,则在连接查询的情况下,oracle 将始终查找表元数据以找出哪个表具有该列。” 那么我的假设是真的吗?
谢谢,哈努曼
我用两个表在 oracle 中编写了一个 sql 连接查询。在编写查询时,我没有使用任何表别名来引用 select 子句中的列。现在这是可能的,因为所选列在两个表中具有不同的名称。
所以问题来了;无论两个表中是否有任何相似的列名,是否有必要(从性能的角度)使用表别名来选择列?
请注意:现在我的印象是“如果我们没有指定表别名来选择列,则在连接查询的情况下,oracle 将始终查找表元数据以找出哪个表具有该列。” 那么我的假设是真的吗?
谢谢,哈努曼
不,你的假设不正确。
使用表别名至少有四个原因:
使用它们没有显着的性能损失。
为了简单...
这失败了
select
ID,
ID
from table1
inner join table2 on table1.ID = table2.AnotherID
这不会失败
select
a.ID,
b.ID
from table1 a
inner join table2 b on a.ID = b.AnotherID
第一个失败的原因是优化引擎不知道从哪个表中提取 ID 字段。使用别名 - 你给它一个关于使用哪个表的“提示”。别名只是完整表名的替代品。
您还必须小心尝试访问别名表的位置。有关这方面的更多信息,请查看 SQL 操作顺序。