【问题标题】:Comparison of Explain Statement Output on Amazon RedshiftAmazon Redshift 上的解释语句输出比较
【发布时间】:2018-09-08 13:43:16
【问题描述】:

我在 Amazon Redshift 中编写了一个非常复杂的查询,其中包含 3-4 个临时表以及子查询。由于查询执行速度很慢,我尝试用另一个查询替换它,它使用派生表而不是临时表。 我只是想问一下,有什么方法可以比较两个查询的“Explain”输出,以便我们可以得出结论哪个查询在性能上更好(两个space时间)。
此外,在 redshift 中用 派生表 替换 临时表 有多大帮助?

【问题讨论】:

  • 要比较解释,请执行“解释(分析、成本、时间、缓冲区、详细、格式 json)”,然后您可以使用并排比较工具进行比较,或者做一个眨眼 -比较使用 pev tatiyants.com/postgres-query-plan-visualization
  • 派生表与临时表是什么意思?请充分解释这部分,如果可以的话 - 显示你的 sql。
  • @JonScott 我的查询是这样的:“ with patient_set as (select * from .........2-3 joins......), metric_set as (select * from ......... 2-3 连接......),测量为(选择 * 从............ 2-3 连接......)选择 x, y,z from patient_set join on ..... join metric_set on .... join measure on ......... where .........
    现在第二个查询是以派生表替换临时表的方式构建的。
  • 请更新您的问题以包含您的查询并解释派生表与临时表的含义是什么?
  • @Ben 谢谢!!! Pev 很有帮助。 :)

标签: sql optimization amazon-redshift temp-tables explain


【解决方案1】:

当 Redshift 生成它自己的临时表(在计划中可见)时,您可以通过自己将它们创建为临时表、指定压缩并添加有助于在表上完成连接的分布和排序键来调整查询。

非常慢的查询通常使用nested loop 连接样式。最快的连接类型是merge join。如果可能,重写查询或修改表以使用merge join 或至少hash join。详情在这里:https://docs.aws.amazon.com/redshift/latest/dg/query-performance-improvement-opportunities.html

更好地理解 Redshift 查询计划和执行的资源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2015-03-26
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多