我有一张超宽桌子,其中有100列redshift。该表更像一个矩阵。每个用户一行,每列1或0,具体取决于用户的某些功能。目标是从此表中获得对选择SQL的最佳响应时间。我们期望表中总共有1.6亿行,而选择将返回约3000万行。选择通常基于列之一。
表格看起来像user_id, col1, col2.....col100
例如:
select * from table 1 where col10=1;
然后,使用此结果集,UI将显示在多列之间相交的用户。目前性能很差。哪些distkey或sortkey选项可以提高查询性能?
答案 0 :(得分:1)
任何返回3000万行的SELECT
语句都会总是表现不佳。
鉴于WHERE
语句可以在数百个布尔列中的任何一个上,因此SORTKEY
无法对其进行优化。但是,响应缓慢的最大原因是需要返回数百万行。
如果要对数百万(甚至数十亿)行进行计算,例如:
SELECT COUNT(*) FROM table1 WHERE col10 = 1;
这将返回单行。
但是,SELECT *
将返回数百万行,每行包含数百列,因此您面临着从数据库到客户端的网络延迟。您要发送的大量数据。
如果您只要求输入感兴趣的列,这将有所帮助,例如:
SELECT user_id FROM table1 WHERE col10 = 1;
但是这仍然会返回很多数据。
因此,如果您确实需要所有这些行返回,那么您可能需要创建某种形式的缓存层以在本地存储该数据。