从redshift的宽表中选择,在任何列上带有where子句

时间:2019-01-17 18:38:26

标签: amazon-web-services amazon-redshift

我有一张超宽桌子,其中有100列redshift。该表更像一个矩阵。每个用户一行,每列1或0,具体取决于用户的某些功能。目标是从此表中获得对选择SQL的最佳响应时间。我们期望表中总共有1.6亿行,而选择将返回约3000万行。选择通常基于列之一。

表格看起来像user_id, col1, col2.....col100

例如:

select * from table 1 where col10=1;

然后,使用此结果集,UI将显示在多列之间相交的用户。目前性能很差。哪些distkey或sortkey选项可以提高查询性能?

1 个答案:

答案 0 :(得分:1)

任何返回3000万行的SELECT语句都会总是表现不佳。

鉴于WHERE语句可以在数百个布尔列中的任何一个上,因此SORTKEY无法对其进行优化。但是,响应缓慢的最大原因是需要返回数百万行。

如果要对数百万(甚至数十亿)行进行计算,例如:

SELECT COUNT(*) FROM table1 WHERE col10 = 1;

这将返回单行。

但是,SELECT *将返回数百万行,每行包含数百列,因此您面临着从数据库到客户端的网络延迟。您要发送的大量数据

如果您只要求输入感兴趣的列,这将有所帮助,例如:

SELECT user_id FROM table1 WHERE col10 = 1;

但是这仍然会返回很多数据。

因此,如果您确实需要所有这些行返回,那么您可能需要创建某种形式的缓存层以在本地存储该数据。