选择字段然后加入OR join然后选择字段?

时间:2013-04-17 13:36:10

标签: performance oracle select join

假设我需要加入3个表(T1T2T3),并说这些表中的每一个都有30列和数百万条记录。获取相关字段然后加入结果或加入3个表然后获取相关字段会更快吗?

我将简化(假设a,b,c中的值是唯一的):

(请,代码可能看起来不像我的意思,如果有人可以解决它我会很感激)

选项1:

SELECT
  T1.a,
  T2.c
FROM
  T1,T2,T3
WHERE
  T1.a = T2.b
  AND T2.b = T3.c

或者,选项2:

SELECT 
  t_T1.a,
  t_T2.c
FROM
  (SELECT a FROM T1) t_T1,
  (SELECT b FROM T2) t_T2,
  (SELECT c FROM T3) t_T3
WHERE
  t_T1.a = t_T2.b
  AND t_T2.b = t_T3.c

请假设在我正在处理的表格中,每一秒都很重要,因此这可能看起来像一个愚蠢的例子,但我真的需要知道哪一个会更快。

BTW,使用ORACLE与PLSQL开发人员10.0.2。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

他们可能会解析相同的优化查询,因此没有区别。

SQL是fourth generation language因此您应该假设强制评估顺序通常不起作用。

答案 1 :(得分:1)

我会选择选项1.

通常,在SQL中,您希望为查询使用最紧凑的表示形式。这为优化器提供了重构查询的最大“自由”。 虽然你的选项2对于大多数优化器来说可能没那么麻烦,但有些情况下,如果你把它放到极端,优化器将无法选择另一个执行路径,而不是你实际拼写出来的那些。

正如大卫所提到的,你不必指定执行顺序;选择1的另一个原因。

最后,人类必须能够维护SQL,所以选择最简单的表示,在这种情况下也是选项1.