【问题标题】:whats is the importance of table alias in sql join query?sql连接查询中表别名的重要性是什么?
【发布时间】:2011-10-12 05:50:23
【问题描述】:

我在 oracle 中用两个表编写了一个 sql 连接查询。 在编写查询时,我没有使用任何表别名来引用 select 子句中的列。 现在这是可能的,因为所选列在两个表中具有不同的名称。

所以问题来了;无论两个表中是否有任何相似的列名,是否有必要(从性能的角度)使用表别名来选择列?

请注意:现在我的印象是“在连接查询的情况下,当我们没有指定表别名来选择列时,oracle 将始终查找表元数据以找出哪个表具有该列。” 我的假设是真的吗?

谢谢, 哈努曼特

【问题讨论】:

    标签: performance oracle join table-alias


    【解决方案1】:

    不,你的假设不正确。

    使用表别名至少有四个原因:

    • 如果别名比名称短,它允许您输入更少。
    • 如果您自行加入表,则要求为其中一个或两个表提供别名,以便区分它们。
    • 派生表在某些数据库系统中必须有别名(但我认为不是 Oracle)。
    • 别名可以更清楚地说明表在该特定查询中的作用。

    使用它们并没有显着的性能损失。

    【讨论】:

    • 那么,oracle如何从没有别名的列名中解析表,它必须查找其内部对象表才能找出列表关系对吗?
    • 显然它必须知道哪些列属于哪些表,但无论您是否使用表别名都是如此。
    • 因此,如果必须查找某些内容,那么在 select 子句中指定表别名会降低 oracle 的负担还是 oracle 仍会查找自己的表?
    • 你需要明白你在谈论的东西,如果它确实有效果,那么它会非常小,以至于你永远无法制作一个有效的测试用例来证明它存在。无论别名与否,它在解析 SQL 时都必须检查列名是否正确。
    • 只是添加 Mark 的答案,使用别名的另一个原因是如果您的 SQL 模式将要更改(尤其是在敏捷风格开发中),有人可以将 status 列添加到另一个表和那么你的查询就被破坏了,在这种情况下维护和检查许多不同查询的成本对测试人员来说是一个沉重的负担。
    【解决方案2】:

    为了简单...

    失败了

    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 操作顺序。

    【讨论】:

      猜你喜欢
      • 2015-09-28
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      相关资源
      最近更新 更多