2010-07-09 68 views
0

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

+0

更好地以什么方式? – Oded 2010-07-09 11:34:54

+1

什么数据库?桌子是什么样的?表中有什么样的数据?那些字段是什么数据类型?无法回答没有**很多**你的部分更多的信息! – 2010-07-09 11:39:17

+0

显然表现。 – Venom 2010-07-09 11:39:27

回答

1

我想它不会在所有的事情,你调用任何一种方式都表。

8

都没有。

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

如果您询问性能(您没有),然后测试您的特定平台。

+1

他的代码等价于你的内部连接,这不会产生任何影响 – 2010-07-09 11:42:50

+0

我无法想象玩弄列和连接的顺序也可以。就可读性而言,这是更好的(在我看来)。 – spender 2010-07-09 11:46:00

+2

@Tobias P:所有3个都是等效的,但自ANSI-92以来,这是*正确的*。 SQL当然是声明式的,所以你告诉优化器你想要什么,然后让它把它整理出来。 – gbn 2010-07-09 11:51:14

1

这取决于我们正在讨论的数据库系统。在许多RDBMS中,有一些查询优化 - 所以如何构建您的查询可能不是服务器处理它的方式......

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

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

3

不应该有任何区别,因为优化程序可能会将其中一个语句转换为另一个语句。但一如既往地确保:运行两种测试,根据您使用的数据库可能会有细微的差异

0

就像你在后面描述的链接,它取决于在哪个表中设置唯一的索引(可能特别适用于IBM DB)。你的答案是帮助页面您链接:)

reagards

1

SQL是declarative所以你告诉优化你想要什么,不怎么做到这一点。

他们是相同的,因为它是基于数学理论,不是为了执行

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

为什么你在阅读有关SQL Server的WebSphere文档?你真的必须努力工作才能避免找到一篇SQL Server文章。

索引(在本文中)对SQL Server中的结果没有影响,只影响性能和使用的执行计划。对于SQL Server,索引与JOIN/WHERE命令分开考虑(无关紧要,当然这是声明式的)。如果在WebSphere改变了它的计划基础上JOIN命令则坦言这是比我想象的(我有客户使用我的数据库从WebSphere ......)

0

我建议更多的狗屎......

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

因为我更喜欢子查询的意见。

+0

但它会表现更好......? (请参阅评论意见) – onedaywhen 2010-07-09 12:45:22

+0

可能,但不可能。如果查询优化器认为合适,它将重写该子查询作为连接,如果不是,则按照它的原则评估它。它可以节省您担心使用什么样的连接(请参阅原始问题的支持者评论)。 – 2010-07-09 13:35:25

+0

只有当您不希望TABLE2的输出为 – gbn 2010-07-10 07:49:21