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;
推荐阅读
- api - 当我提出请求时,URL 中的参数在哪里?
- azure-devops - Azure 管道复制文件任务
- asp.net-identity - Asp.Net Identity 检查 tokenlifespan 时间为两个因素
- javascript - 带有时间戳的对象数组的日期过滤[图表添加]
- snakemake - 用于输出文件命名的 Snakefile 和通配符/正则表达式
- python - scikit-learn 在 make_scorer 中苦苦挣扎
- javascript - 终止 JavaScript 中的处理程序执行
- android - Android Studio 错误:程序类型已存在:org.objectweb.asm.Edge
- java - 用于文本文件处理的 Java 多线程
- r - R中时间序列缺失数据的插补模型