【发布时间】:2011-04-27 00:14:29
【问题描述】:
我的问题与SQL order of operations 类似,但略有不同,所以我认为这样问是公平的。
我正在使用 Teradata。我有 2 张桌子:table1、table2。
table1 只有一个 id 列。table2 有以下列:id、val
我可能错了,但我认为这两个陈述给出了相同的结果。
声明 1.
SELECT table1.id, table2.val
FROM table1
INNER JOIN table2
ON table1.id = table2.id
WHERE table2.val<100
声明 2。
SELECT table1.id, table3.val
FROM table1
INNER JOIN (
SELECT *
FROM table2
WHERE val<100
) table3
ON table1.id=table3.id
我的问题是,查询优化器是否足够聪明
- 先执行 WHERE 子句,然后在语句 1 中执行 JOIN
- 知道语句 2 中实际上不需要表 3
我对 SQL 很陌生,所以如果我有什么误解,请指教。
【问题讨论】:
-
我原以为查询优化器会为两者提供相同的计划。尝试运行
EXPLAIN计划进行验证。