首页 > 解决方案 > 如何以及选择哪一列作为 teradata 中的主索引

问题描述

在创建表时未定义 teradata 的主索引时,如何以及选择哪一列作为主索引?

标签: teradata

解决方案


如果您未定义索引,Teradata 将隐式将第一行作为主索引。除此之外,您可以选择一个或多个列作为主索引,或者通过 NO PRIMARY INDEX 定义表。主索引将定义跨 AMPS 的数据的分布键。如果没有定义 PRIMARY INDEX,它将是 RoundRobin。

选择 PI 是物理设计的一部分,没有办法将它们全部统治。文档中有一个专门的文档涵盖此主题(“数据库设计”)。你必须考虑:

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;

推荐阅读