在创建表时未定义时,如何以及将哪一列选择为teradata中的主索引?
答案 0 :(得分:2)
如果不定义索引,Teradata将隐式将第一行作为主索引。除此之外,您可以选择一个或多个列作为主索引,或者通过NO PRIMARY INDEX定义表。 主索引将定义AMPS上数据的分发密钥。如果未定义NO PRIMARY INDEX,它将为RoundRobin。
选择PI是Physical Design的一部分,没有答案可以完全统治它们。文档中有一个专门的文档涵盖了该主题(“数据库设计”)。您必须想到:
1)分配数据(防止高偏斜)
2)可能的访问权限和加入权限
广告1)应该清楚
ad 2)由于数据是在PI上分布的,因此不同于PI的GROUP BY或具有PI以外的Join-Fields的JOIN(至少PI必须是它的一部分)将导致假脱机数据重新分配。 -这对查询的性能不利。
如果您想用数据测试不同的PI,则可以使用以下SQL通过SQL进行测试(例如myTable,其PI的列为column_1和column_2):
SELECT HASHAMP (HASHBUCKET (HASHROW (column_1,column_2))) as targetAMP
,COUNT (*) as CountRecords
FROM myTable
GROUP BY targetAMP;