WHERE子句与较小的表

时间:2017-09-29 00:21:44

标签: query-optimization amazon-redshift

对于具有WHERE子句的表的查询时间是否存在有意义的差异(或给定表大小的经验法则),该子句限制结果集与较小的表相比,该较小的表等于后WHERE的大小,结果集有限?

例如:

  1. 您的表中包含多年的时间戳记录。您运行的查询包含WHERE子句,仅将结果限制为过去10天。

  2. 您的表只有10天的数据,并且您运行与上面相同的查询(显然没有WHERE子句,因为在这种情况下没有必要)。

  3. 我是否应该期望上述两种情况下的查询性能差异?请注意,我使用的是Redshift。显然,存储少量数据可以节省成本,这是方案2的一个好处。还有其他吗?

2 个答案:

答案 0 :(得分:2)

它完全取决于表和索引(如果Redshift是Sort键)。传统上,如果您在时间戳上有一个降序索引并在where子句上使用时间戳,那么查询引擎将很快找到所需的记录并停止查找。

记录较少,甚至维护两个表可能仍然有一些好处,但如果测试表明性能优势是真实和必要的,那么复制数据应该是最后的手段。

答案 1 :(得分:0)

在Redshift中,答案是肯定的,在较大的表上查询较小的表而不是where子句总是更快。这是因为Redshift通常会扫描表中的所有行。或至少那些未被分发/排序键优化排除的行。

让我们解决这个问题的其他重要方面

在几乎所有情况下,Redshift存储都很便宜 - 这是因为当容量规划Redshift集群时,存储通常不是决定因素。它更多的是获得您想要运行的查询所需的性能。

  1. 您可以通过4种方式提高Redshift查询的性能 增加群集的大小。
  2. 调整查询。
  3. 考虑到更改Redshift表的定义 内容和使用模式。排序和分配键可以制作一个 很大的区别。还应考虑压缩类型。
  4. 实施Redshift绩效管理,优先考虑 优先级较高的查询。