6

我注意到我第一次在 RedShift 上运行查询需要 3-10 秒。当我再次运行相同的查询时,即使在 WHERE 条件下使用不同的参数,它也运行得很快(0.2 秒)。查询我说的是在一个约 1M 行的表上运行,在 3 个整数列上。

执行时间的巨大差异是否是由于 RedShift 在第一次运行时编译查询,然后重新使用已编译的代码这一事实造成的?

如果是 - 如何始终保持编译查询的缓存温暖?

还有一个问题:给定 queryA 和 queryB。假设 queryA 首先被编译和执行。queryB 应该与 queryA 有多相似,这样 queryB 的执行将使用为 queryA 编译的代码?

4

1 回答 1

4

第一个问题的答案是肯定的。Amazon Redshift 为查询编译代码并将其缓存。编译后的代码在集群中的会话之间共享,因此在不同会话中具有不同参数的相同查询将运行得更快,因为没有开销。

他们还建议使用第二次执行查询的结果作为基准。

以下链接中有此问题的答案和详细信息。 http://docs.aws.amazon.com/redshift/latest/dg/c-compiled-code.html

于 2013-11-21T08:09:58.107 回答