Amazon Redshift外键 - 排序或交错密钥

时间:2018-05-25 23:36:06

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

我们计划将OLTP关系表导入AWS Redshift。 CustomerTransaction表连接到多个查找表。我只包括3,但我们有更多。

Sort Key是什么应该在客户交易表上?在常规SQL服务器中,我们在CustomerTransaction表中的外键上有非聚簇索引。 对于AWS Redshift,我应该在CustomerTransaction中的外键列上使用复合排序键还是交叉排序?这个表设计的最佳索引策略是什么? 谢谢,

create table.dbo CustomerTransaction
{
    CustomerTransactionId bigint primary key identity(1,1),
    ProductTypeId bigint,   -- foreign keys to Product Type Table
    StatusTypeID bigint         -- Foreign keys to StatusTypeTable
    DateOfPurchase date,
    PurchaseAmount float,
    ....
}

create table dbo.ProductType
{
    CustomerTransactionId bigint primary key identity(1,1),
    ProductName varchar(255),
    ProductDescription varchar(255)
    .....
}

create table dbo.StatusType
{
    StatusTypeId bigint primary key identity(1,1),
    StatusTypeName varchar(255),
    StatusDescription varchar(255)
    .....

}

1 个答案:

答案 0 :(得分:2)

一般的经验法则是:

  • 根据您常用的DISTKEY
  • 设置GROUP BY
  • 根据SORTKEY语句
  • 中常用的内容设置WHERE
  • 避免交错排序键(它们仅在极少数情况下是最佳的,并且需要经常VACUUM

来自Choose the Best Distribution Style - Amazon Redshift

  • 在其公共列上分发事实表和一个维度表
  • 根据过滤数据集的大小选择最大维度
  • 在过滤结果集中选择具有高基数的列
  • 更改某些维度表以使用所有分发

因此,推荐特定的DISTKEYSORTKEY并不容易,因为取决于您如何使用故事。仅仅看到DDL不足以推荐优化表格的最佳方法。

其他参考资料: