WHERE子句vs更小的表
问题描述:
对于WHERE子句限制结果集的表的查询时间,是否存在有意义的区别(或者对于给定的表大小,有一个经验法则),与限制结果集的WHERE子句相比,后WHERE,有限的结果集?WHERE子句vs更小的表
例如:
你的表有时间戳跨越多年的纪录。您运行一个包含WHERE子句的查询,只将结果限制为最近10天。
您的表只有10天的数据,并且您运行与上面相同的查询(显然没有WHERE子句,因为在这种情况下没有必要)。
我应该期待上述两种情况下的查询性能差异吗?请注意,我正在使用Redshift。显然,存储更少数据会节省$ $$,这是方案2的一个好处。其他方面?
答
它完全取决于表和索引(Redshift的情况下排序键)。传统上,如果您在时间戳上有降序索引并在where子句中使用时间戳,那么查询引擎会很快找到它需要的记录并停止查找。
可能还有一些好处,即减少记录,甚至可能维护两张表格,但如果测试显示性能优势是真实和必要的,则重复数据应该是最后的手段。
答
在Redshift中,答案是肯定的,查询更小的表格而不是更大的表格上的where子句总是更快。这是因为Redshift通常会扫描表中的所有行。或者至少那些没有被分配/排序键优化排除的行。
让我们也可以解决这个问题
的另一重要方面在几乎所有情况下红移存储便宜 - 这是因为存储通常不是在容量规划红移集群的决定因素。更重要的是获得您想要运行的查询所需的性能。
- 您可以通过4种方式提高Redshift查询的性能 增加集群的大小。
- 调整查询。
- 修改Redshift表的定义,考虑 的内容和使用模式。排序和分配键可以使 有很大的不同。压缩类型也应该被考虑。
- 执行Redshift性能管理,优先考虑 更高优先级的查询。
这个答案是不正确的 - 问题是关于Redshift - Redshift没有索引。 –
@JonScott我更新了答案,包括Redshift术语'Sort Key',它可以达到同样的目的。 –