多个连接语句实际发生了什么?

时间:2015-05-08 20:47:13

标签: sql join left-join inner-join teradata

我对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,以使语句有效,还是因为创建临时表而没有区别?

2 个答案:

答案 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