SQL中哪一个更好?

时间:2010-07-09 11:32:39

标签: sql

SQL中哪一个更好?

SELECT A.COL_A1, B.COL_B1 FROM TABLE1 A, TABLE2 B
WHERE A.COL_A1 = B.COL_B1

或:

SELECT B.COL_B1, A.COL_A1 FROM TABLE2 B, TABLE1 A
WHERE B.COL_B1 = A.COL_A1

更多信息.. http://publib.boulder.ibm.com/infocenter/iisclzos/v9r1/index.jsp?topic=/com.ibm.websphere.ii.federation.classic.tuning.doc/tuning/iiyfctqcjoin.html

7 个答案:

答案 0 :(得分:8)

都不是。

SELECT 
    A.COL_A1, B.COL_B1 
FROM TABLE1 A 
    INNER JOIN TABLE2 B ON A.COL_A1 = B.COL_B1

如果您询问性能(您没有),那么请在您的特定平台上进行测试。

答案 1 :(得分:3)

不应该有任何区别,因为优化器可能会在内部将其中一个语句转换为另一个语句。但是一如既往地确定:用两者运行测试,根据您使用的数据库可能略有不同

答案 2 :(得分:1)

我想这根本不重要,你可以用两种方式调用两个表。

答案 3 :(得分:1)

这取决于我们所讨论的数据库系统。在许多RDBMS中,存在某种查询优化 - 因此您构建查询的方式可能与服务器处理它的方式不同......

例如,有一个查询优化器可以计算执行计划;通常它是正确的,但你可以help it along the way

大多数其他主要数据库都有类似的东西......因此在您的示例中,您的两个示例很可能以完全相同的方式处理。

答案 4 :(得分:1)

SQL是declarative所以你告诉优化器你想要什么,而不是 这样做。

它们是平等的,因为它基于数学理论,而不是执行顺序

然而,花钱的答案是正确的,因为这是使用JOIN的ANSI-92而不是你发布的旧的“过滤的笛卡儿”。

为什么要阅读有关SQL Server的WebSphere文档?你真的必须努力避免找到SQL Server文章。

索引(在文章中)对SQL Server中的结果没有影响,只对性能和使用的执行计划有影响。对于SQL Server,索引与JOIN / WHERE命令分开考虑(无关紧要,当然是声明性的)。如果WebSphere基于JOIN命令更改了它的计划,那么坦率地说它比我想象的更糟糕(我有客户端使用我的WebSphere数据库......)

答案 5 :(得分:0)

与您发布的链接一样,它取决于在哪个表中设置了唯一的索引(特别是对于IBM DB)。您的答案是您链接的帮助页面:)

reagards

答案 6 :(得分:0)

我建议......

SELECT COL_A1
    FROM TABLE1 A
    WHERE EXISTS (SELECT *
                      FROM TABLE2 B
                      WHERE A.COL_A1 = B.COL_B1);

因为我更喜欢查询子查询。