gpt4 book ai didi

sql - 复合主键是否也为每一列单独创建索引?

转载 作者:行者123 更新时间:2023-12-05 06:24:12 24 4
gpt4 key购买 nike

在 Teradata 中,我使用两个 varchar 列 A 和 B 中的唯一主键创建表。我将编写需要对这些列中的一个或两个列进行筛选的查询。

为了获得最佳性能,我是否应该为两列中的每一列提交一个创建索引语句(该表将有 3 个索引:唯一主键(列 A、B)、非唯一列 A 和非唯一列B)?

在这张表上,我只关心读性能,不关心插入/更新性能。

最佳答案

在 Teradata 中,如果您在创建表时指定了 PRIMARY KEY 子句,那么该表将自动使用 UNIQUE PRIMARY INDEX (UPI) 在这些子句上创建PK 列。虽然 Teradata 支持键,但它更像是一个基于索引的 DBMS。

在您的情况下,仅当您在 PK。这适用于前面评论中提到的平等访问(感谢 Dieter)。

如果您访问表中的一些但不是所有的 PK/UPI 列,那么您的查询将不会使用 UPI访问路径。您需要定义单独的索引或其他优化策略,具体取决于您的查询。

如果您只关心读取性能,那么在单独的列上创建二级索引是有意义的。只需对您的查询运行 EXPLAIN 即可确保优化器实际使用了索引。

另一种选择是完全放弃 PK 规范,尤其是当您从不访问该组列上的表时。如果您访问的一列多于另一列,请将该列指定为您的 PRIMARY INDEX(非唯一)并在另一列上创建二级索引。像这样的东西:

CREATE TABLE mytable (
A INTEGER,
B INTEGER,
C VARCHAR(10)
)
PRIMARY INDEX(A) -- Non-unique primary index
;

CREATE INDEX (B) ON mytable; -- Create secondary index

关于sql - 复合主键是否也为每一列单独创建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57813759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com