使用红移键来提高查询效率
use of redshift keys to make query efficient
我有一个红移 table 有数亿行。我的典型查询如下所示...
select * from table where senddate > '2015-01-01 00:00:00' and senddate < '2015-08-01 00:00:00' and username = 'xyz'
我不确定排序键和分布键是如何工作的。我想知道什么是提高查询效率的最佳选择。
我有大约 3,000 个唯一用户名,senddate 是过去 5 年内的日期。
我还有一个问题:
我没有为此使用任何压缩 table。这会使查询变慢吗?
- 永远不要在列式数据库中使用 select *,只拉取需要的列。
- 如果这是您想要的唯一查询 运行,分配键无关紧要。您可以执行 diststyle ALL,但它将占用 n 倍的存储空间,其中 n 是节点数。也就是说,如果您要加入 tables,请将它们分布在加入密钥
上
- 您可以在 senddate 和用户名上设置排序键以避免读取所有记录(类似于行存储中的 table 扫描)
通读以对这些要点有一个基本的了解
http://docs.aws.amazon.com/redshift/latest/dg/c-optimizing-query-performance.html
我有一个红移 table 有数亿行。我的典型查询如下所示...
select * from table where senddate > '2015-01-01 00:00:00' and senddate < '2015-08-01 00:00:00' and username = 'xyz'
我不确定排序键和分布键是如何工作的。我想知道什么是提高查询效率的最佳选择。 我有大约 3,000 个唯一用户名,senddate 是过去 5 年内的日期。
我还有一个问题:
我没有为此使用任何压缩 table。这会使查询变慢吗?
- 永远不要在列式数据库中使用 select *,只拉取需要的列。
- 如果这是您想要的唯一查询 运行,分配键无关紧要。您可以执行 diststyle ALL,但它将占用 n 倍的存储空间,其中 n 是节点数。也就是说,如果您要加入 tables,请将它们分布在加入密钥 上
- 您可以在 senddate 和用户名上设置排序键以避免读取所有记录(类似于行存储中的 table 扫描)
通读以对这些要点有一个基本的了解 http://docs.aws.amazon.com/redshift/latest/dg/c-optimizing-query-performance.html