我对teradata中的多个连接有一个广泛的问题。
例如,我有:table1,table2,table3,table4。我想为所有人c:\development\angularApp\src\app> protractor debug end2end.conf.js
做一个
所以:
INNER JOIN
所以这里发生的事情是,每次进行连接时,都会在此连续SELECT a.*, b.*, c.*, d.*
FROM table1 a
JOIN table2 b ON a.acct_ID = b.acct_ID
JOIN table3 c ON a.acct_ID = c.acct_ID
JOIN table4 d ON a.acct_ID = d.acct_ID
中创建一个临时表?
on语句应该是(((table 1+ table 2)+table 3)+table 4)
和b.acct_ID = c.acct_ID
,以使语句有效,还是因为创建临时表而没有区别?
答案 0 :(得分:1)
如果内部连接多个表,连接的顺序由优化器决定,则根据知识(行数,收集的统计信息,唯一性)开发查询计划。 只能在一个步骤中连接两组数据,因此优化器将在二元关系中拆分多个连接,并尝试找到最便宜的计划。 Teradata手册中有更多细节: planning n-way joins(以及之前和之后的页面)
非常令人印象深刻的是,优化连接的可能方式越来越多,例如: 18,000,000,000种不同的方式来进行10桌加入: possible join orders
对于Teradata,连接的结果将存储在所谓的“假脱机”中(如果它不是太大则缓存)。
要查看实际计划,您可以通过在查询前添加Explain
或按F6(在SQL Assistant和TD Studio中)来“解释”查询,这将返回一个相当冗长的文本表示形式。计划。
答案 1 :(得分:0)
如果您想知道在选择过程中会发生什么,请检查execution plan。