Teradata 主索引17 Mar 2025 | 4 分钟阅读 主索引用于指定数据在 Teradata 中的存储位置。它用于确定哪个 AMP 获取数据行。 在 Teradata 中,每个表都需要定义一个主索引。如果未定义主索引,Teradata 会自动分配主索引。 主索引提供了访问数据的最快方法。一个主索引最多可以有 64 列。主索引在创建表时定义,不能更改或修改。 主索引是以下操作的首选和重要索引:
主索引规则以下是主索引的一些具体规则,例如: 规则 1: 每个表一个主索引。 规则 2: 主索引值可以唯一或非唯一。 规则 3: 主索引值可以为 NULL。 规则 4: 填充表的 主索引无法修改。 规则 5: 主索引值可以修改。 规则 6: 主索引最多可以有 64 列。 主索引的类型主索引有两种类型。
1. 唯一主索引 (UPI)在唯一主索引表中,该列不应有任何重复值。如果插入任何重复值,将被拒绝。唯一主索引强制列的唯一性。 唯一主索引 (UPI) 总是将表的行均匀地分布在 AMP 之间。UPI 访问始终是一个单 AMP 操作。 如何创建唯一主索引? 在以下示例中,我们创建包含 Roll_no、First_name 和 Last_name 列的 Student 表。
我们选择 Roll_no 作为主索引。因为我们将 Roll_no 指定为唯一主索引,所以表中不能有重复的学生学号。 2. 非唯一主索引 (NUPI)非唯一主索引 (NUPI) 意味着所选列的值可以是非唯一的。 非唯一主索引永远不会均匀地分布表行。如果数据分布不均匀,则全 AMP 操作将花费更长时间。 我们可能会选择 NUPI 而不是 UPI,因为 NUPI 列可能对查询访问和连接更有用。 如何创建非唯一主索引? 在以下示例中,我们创建包含 Employee_Id、Name、Department 和 City 列的 employee 表。
在此表中,每个员工都有不同的员工 ID、姓名和部门,但许多员工属于同一个城市。因此,我们选择 City 作为非唯一主索引。 多列主索引Teradata 允许将多个列指定为主索引。它仍然只是一个主索引,但它只是由组合多个列组成。 Teradata 多列主索引允许最多 64 个组合列组成表所需的一个主索引。 示例 在以下示例中,我们已将 First_Name 和 Last_Name 组合起来构成主索引。 这对于以下两个原因非常有用且有益:
使用主索引的数据分布当用户使用主索引对表提交 SQL 请求时,该请求将变为单 AMP 操作,这是系统查找行的最直接和最有效的方式。 该过程解释如下。 完整过程在下图中说明 ![]() 哈希过程哈希过程在以下步骤中定义,例如 步骤 1: 在第一步中,主索引值进入哈希算法。 步骤 2: 哈希算法的输出是行哈希值。 步骤 3: 哈希映射指向行所在的特定 AMP。 步骤 4: PE 将请求直接发送到已识别的 AMP。 步骤 5: AMP 在其 vdisk 上找到行。 步骤 6: 数据通过 BYNET 发送到 PE,PE 将答案集发送到客户端应用程序。 重复的行哈希值哈希算法最终可能为两个不同的行生成相同的行哈希值。 我们可以通过两种方式做到这一点,例如
为了区分表中的每一行,将为每一行分配一个唯一的行 ID。 行 ID 是行哈希值和唯一值的组合。 行 ID = 行哈希值 + 唯一性值 唯一性值用于区分主索引值生成相同行哈希值的行。在大多数情况下,只需要行 ID 的行哈希值部分即可找到该行。 ![]() 插入每一行时,AMP 会添加行 ID,并将其存储为行的前缀。 使用特定行哈希值插入的第一行分配一个唯一的唯一值,对于使用相同行哈希值插入的任何其他行,该值递增 1。 下一个主题Teradata 连接 |
我们请求您订阅我们的新闻通讯以获取最新更新。