Performance 选择字段然后联接,还是联接然后选择字段?

Performance 选择字段然后联接,还是联接然后选择字段?,performance,oracle,select,join,Performance,Oracle,Select,Join,假设我需要连接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,

假设我需要连接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 developer 10.0.2


非常感谢您的帮助。

他们可能会解析为相同的优化查询,因此不会有任何区别


SQL是一个很好的工具,所以您应该假设强制计算顺序通常不会起作用。

我会选择选项1

通常,在SQL中,您希望对查询使用最紧凑的表示形式。这使优化器可以最“自由”地重新构造查询。 虽然您的选项2对大多数优化器来说可能不会有太大的麻烦,但在某些情况下,如果您将其发挥到极致,优化器将无法选择其他执行路径,而不是您实际指定的路径

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


最后,人类必须能够维护SQL,所以选择最简单的表示法,在本例中也是选项1。

Mahmoud,感谢您的编辑。我想投票支持,但显然我需要15个声誉才能做到这一点。