1

假设我需要加入 3 个表(T1, T2, T3),并且可以说这些表中的每一个都有 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

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

顺便说一句,将 ORACLE 与 PLSQL 开发人员 10.0.2 一起使用。

非常感谢您的帮助。

4

2 回答 2

1

They probably resolve to the same optimised query, so there would be no difference.

SQL is a fourth generation language so you should assume that forcing evaluation order is generally not going to work.

于 2013-04-17T13:38:22.387 回答
1

我会选择选项1。

通常,在 SQL 中,您希望对查询使用最紧凑的表示。这为优化器提供了重构查询的最大“自由度”。虽然您的选项 2 对大多数优化器来说可能不会有太大的麻烦,但在某些情况下,如果您将其发挥到极致,优化器将无法选择与您实际说明的路径不同的执行路径。

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

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

于 2013-04-17T13:42:27.433 回答