对于具有WHERE子句的表的查询时间是否存在有意义的差异(或给定表大小的经验法则),该子句限制结果集与较小的表相比,该较小的表等于后WHERE的大小,结果集有限?
例如:
您的表中包含多年的时间戳记录。您运行的查询包含WHERE子句,仅将结果限制为过去10天。
您的表只有10天的数据,并且您运行与上面相同的查询(显然没有WHERE子句,因为在这种情况下没有必要)。
我是否应该期望上述两种情况下的查询性能差异?请注意,我使用的是Redshift。显然,存储少量数据可以节省成本,这是方案2的一个好处。还有其他吗?
答案 0 :(得分:2)
它完全取决于表和索引(如果Redshift是Sort键)。传统上,如果您在时间戳上有一个降序索引并在where子句上使用时间戳,那么查询引擎将很快找到所需的记录并停止查找。
记录较少,甚至维护两个表可能仍然有一些好处,但如果测试表明性能优势是真实和必要的,那么复制数据应该是最后的手段。
答案 1 :(得分:0)
在Redshift中,答案是肯定的,在较大的表上查询较小的表而不是where子句总是更快。这是因为Redshift通常会扫描表中的所有行。或至少那些未被分发/排序键优化排除的行。
让我们解决这个问题的其他重要方面
在几乎所有情况下,Redshift存储都很便宜 - 这是因为当容量规划Redshift集群时,存储通常不是决定因素。它更多的是获得您想要运行的查询所需的性能。