如何在Amazon Redshift中创建索引

时间:2015-08-19 06:39:09

标签: sql amazon-web-services indexing amazon-redshift

我尝试在Amazon Redshift中创建索引,但收到错误

create index on session_log(UserId);

UserId是一个整数字段。

3 个答案:

答案 0 :(得分:46)

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

create index IX1 on "SomeTable"("UserId");

您将收到错误

  

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

这是因为,与其他data warehouses一样,Redshift使用columnar storage,因此,其他RDBMS中使用的许多索引技术(如添加非聚集索引)都不是适用。

但您可以选择为每个表提供一个sort key,还可以使用distribution key来分析数据,并为每列选择合适的compression encodings来影响效果最小化存储和I / O开销。

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

create table if not exists "SomeTable"
(
    "UserId" int,
    "Name" text
)
sortkey("UserId");

您可能需要阅读一些引物like these

答案 1 :(得分:3)

Redshift允许创建主键

create table user (
id int ,
phone_number int,
primary key(id))

但由于Redshift不强制执行此约束,因此主键接受重复值。

关于该问题的附件

  

http://www.sqlhaven.com/amazon-redshift-what-you-need-to-think-before-defining-primary-key/

答案 2 :(得分:1)

您可以ex1.jpg但仅限于提供信息,正如亚马逊所说:Amazon Redshift并未强制执行这些信息。尽管如此,主键和外键用作计划提示,如果您的ETL过程或应用程序中的某些其他过程强制执行它们,则应声明它们。

某些服务(如带有插入模式的管道(REPLACE_EXISTING))需要在表中定义主键。

出于其他表现目的,斯图尔特的回答是正确的。