WHERE子句vs更小的表

WHERE子句vs更小的表

问题描述:

对于WHERE子句限制结果集的表的查询时间,是否存在有意义的区别(或者对于给定的表大小,有一个经验法则),与限制结果集的WHERE子句相比,后WHERE,有限的结果集?WHERE子句vs更小的表

例如:

  1. 你的表有时间戳跨越多年的纪录。您运行一个包含WHERE子句的查询,只将结果限制为最近10天。

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

我应该期待上述两种情况下的查询性能差异吗?请注意,我正在使用Redshift。显然,存储更少数据会节省$ $$,这是方案2的一个好处。其他方面?

它完全取决于表和索引(Redshift的情况下排序键)。传统上,如果您在时间戳上有降序索引并在where子句中使用时间戳,那么查询引擎会很快找到它需要的记录并停止查找。

可能还有一些好处,即减少记录,甚至可能维护两张表格,但如果测试显示性能优势是真实和必要的,则重复数据应该是最后的手段。

+0

这个答案是不正确的 - 问题是关于Redshift - Redshift没有索引。 –

+0

@JonScott我更新了答案,包括Redshift术语'Sort Key',它可以达到同样的目的。 –

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

让我们也可以解决这个问题

的另一重要方面在几乎所有情况下红移存储便宜 - 这是因为存储通常不是在容量规划红移集群的决定因素。更重要的是获得您想要运行的查询所需的性能。

  1. 您可以通过4种方式提高Redshift查询的性能 增加集群的大小。
  2. 调整查询。
  3. 修改Redshift表的定义,考虑 的内容和使用模式。排序和分配键可以使 有很大的不同。压缩类型也应该被考虑。
  4. 执行Redshift性能管理,优先考虑 更高优先级的查询。