在连接2个表时,WHERE子句是否会在连接发生之前或之后减小表大小?

时间:2017-02-26 19:50:33

标签: sql teradata

例如,第一个查询的处理是否与第二个查询不同?

查询1

SELECT t1.var1, t2.var2 FROM table1 t1
INNER JOIN table2 t2
ON t1.key = t2.key
WHERE t2.ID = 'ABCD'

查询2

SELECT t1.var1, t2.var2 FROM table1 t1
INNER JOIN (
           SELECT var2, key from table2
           WHERE ID = 'ABCD'
           ) t2
ON t1.key = t2.key
WHERE t2.ID = 'ABCD'

乍一看,好像第二个查询会更有效 - 在连接开始之前,table2会减少,而第一个查询似乎先加入表,然后再减少。我正在使用teradata,如果重要的话。

1 个答案:

答案 0 :(得分:1)

取决于供应商,版本和配置 Teradata旧版本/旧版配置可能会将子查询假脱机作为查询2的第一阶段,与查询1相比,导致减少性能取决于表的主索引和连接算法。
我建议避免这种“优化”。

P.S。

  1. 检查您是否为两个计划或不同的执行计划获得相同的执行计划。
  2. 检查查询日志中的AMPCPUTime(用于开始)