Teradata中连接条件含非PI列时,主键索引(PI)能否被利用?
在Teradata中,连接条件同时包含主键索引(PI)列与非PI列时,PI是否会被系统利用?
示例场景
-- Table A CREATE TABLE Orders ( OrderID INT, CustomerID INT, Region VARCHAR(20) ) PRIMARY INDEX (CustomerID); -- Table B CREATE TABLE Customers ( CustomerID INT, Region VARCHAR(20), Name VARCHAR(50) ) PRIMARY INDEX (CustomerID);
查询语句:
SELECT * FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID -- c.CustomerID 是PI列 AND o.Region = c.Region -- c.Region 非PI列
答案:会被利用
Teradata优化器会优先识别并利用PI列的等值连接条件,即使连接中同时存在非PI列的条件,核心逻辑如下:
- PI的核心作用是控制数据在AMP节点的分布,当两张表的PI为同一列(如示例中的
CustomerID)时,相同CustomerID的记录会被哈希分配到同一个AMP上。优化器会直接在每个AMP节点内完成CustomerID相等的记录匹配,彻底避免跨AMP的数据重分布——这是Teradata连接优化的核心手段之一,能大幅降低执行开销。 - 非PI列的连接条件(
o.Region = c.Region)会作为二次过滤条件,在AMP本地完成PI匹配后,进一步筛选符合Region相等的记录,不会干扰PI的利用逻辑。
执行逻辑示例
- 由于Orders和Customers的PI都是
CustomerID,相同CustomerID的所有记录都存储在同一个AMP节点上。 - 优化器在每个AMP内,先匹配Orders与Customers中
CustomerID相等的记录对。 - 对这些匹配的记录对,再过滤出
Region值相等的结果,最终汇总所有AMP的结果返回。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

