如何在Amazon Redshift中创建索引

use*_*910 23 sql indexing amazon-web-services amazon-redshift

我正在尝试在Amazon Redshift中创建索引但是我收到了一个错误

create index on session_log(UserId);
Run Code Online (Sandbox Code Playgroud)

UserId 是一个整数字段.

Stu*_*tLC 52

如果您尝试在Redshift表上创建索引(带有名称):

create index IX1 on "SomeTable"("UserId");
Run Code Online (Sandbox Code Playgroud)

你会收到错误

执行SQL命令时发生错误:在"SomeTable"("UserId")上创建索引IX1错误:SQL命令"创建索引IX1 on"SomeTable"("UserId")"Redshift表不支持.

这是因为,与其他数据仓库一样,Redshift使用列式存储,因此,其他RDBMS中使用的许多索引技术(如添加非聚簇索引)都不适用.

但是,您可以选择为每个表提供单个排序键,还可以使用分发键来影响性能,以便对每个列进行分片,并为每个列选择适当的压缩编码,以最大限度地减少存储和I/O开销.

例如,在您的情况下,您可以选择使用UserId作为排序键:

create table if not exists "SomeTable"
(
    "UserId" int,
    "Name" text
)
sortkey("UserId");
Run Code Online (Sandbox Code Playgroud)

你可能想读一些 这样的引物

  • @Faiz 谢谢 - 我已经更新了,尽管对于那些习惯于更传统的 Sql 数据库的人,我真的无法在 AWS 上找到一个好的“思维转变”参考。 (3认同)