我的问题类似于这个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很新,所以如果我误解了什么,请教育我.
这取决于很多事情(表大小,索引,键分布等),您应该检查执行计划:
您没有说哪个数据库,但是有一些方法:
MySql EXPLAIN
SQL Server SET SHOWPLAN_ALL(Transact-SQL)
Oracle EXPLAIN PLAN
Teradata中的解释是什么?
Teradata通过Visual Explain和XML计划日志记录来更快地捕获和比较计划
归档时间: |
|
查看次数: |
17036 次 |
最近记录: |