WHERE和JOIN操作顺序

Rus*_*ell 13 sql teradata

我的问题类似于这个SQL操作顺序,但有一点点扭曲,所以我认为这是公平的.

我正在使用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
Run Code Online (Sandbox Code Playgroud)

声明2.

SELECT table1.id, table3.val
FROM table1
INNER JOIN (
    SELECT *
    FROM table2
    WHERE val<100
)  table3
ON table1.id=table3.id
Run Code Online (Sandbox Code Playgroud)

我的问题是,查询优化器是否足够聪明
- 首先执行WHERE子句然后在语句1中稍后加入
- 知道语句2中实际上不需要表3

我对SQL很新,所以如果我误解了什么,请教育我.

KM.*_*KM. 5

这取决于很多事情(表大小,索引,键分布等),您应该检查执行计划:

您没有说哪个数据库,但是有一些方法:
MySql EXPLAIN
SQL Server SET SHOWPLAN_ALL(Transact-SQL)
Oracle EXPLAIN PLAN

Teradata中的解释是什么?
Teradata通过Visual Explain和XML计划日志记录来更快地捕获和比较计划