Amazon Redshift 上的 Explain 语句输出比较
Comparison of Explain Statement Output on Amazon Redshift
我在 Amazon Redshift 中写了一个非常复杂的查询,其中包含 3-4 个临时表以及子表 queries.Since,查询执行速度很慢,我试图用另一个查询替换它,该查询使用 派生表 而不是临时表。
我只想问,有什么方法可以比较两个查询的“Explain”输出,这样我们就可以得出结论哪个查询在性能上更好(space 和 时间)。
另外,在 redshift 中用 derived tables 替换 temporary tables 有多大帮助?
当 Redshift 生成它自己的临时 tables(在计划中可见)时,您可以通过自己创建临时 tables 来调整查询,指定压缩并添加分布以及有助于在 table 上完成联接的排序键。
非常慢的查询通常使用 nested loop
连接样式。最快的连接类型是 merge join
。如果可能,请重写查询或修改 table 以使用 merge join
或至少 hash join
。详情在这里:https://docs.aws.amazon.com/redshift/latest/dg/query-performance-improvement-opportunities.html
更好地理解 Redshift 查询计划和执行的资源:
- 查询计划和执行工作流程:
- 查看查询计划步骤:
- 将查询计划映射到查询摘要:
- 查询调优的诊断查询:
我在 Amazon Redshift 中写了一个非常复杂的查询,其中包含 3-4 个临时表以及子表 queries.Since,查询执行速度很慢,我试图用另一个查询替换它,该查询使用 派生表 而不是临时表。
我只想问,有什么方法可以比较两个查询的“Explain”输出,这样我们就可以得出结论哪个查询在性能上更好(space 和 时间)。
另外,在 redshift 中用 derived tables 替换 temporary tables 有多大帮助?
当 Redshift 生成它自己的临时 tables(在计划中可见)时,您可以通过自己创建临时 tables 来调整查询,指定压缩并添加分布以及有助于在 table 上完成联接的排序键。
非常慢的查询通常使用 nested loop
连接样式。最快的连接类型是 merge join
。如果可能,请重写查询或修改 table 以使用 merge join
或至少 hash join
。详情在这里:https://docs.aws.amazon.com/redshift/latest/dg/query-performance-improvement-opportunities.html
更好地理解 Redshift 查询计划和执行的资源:
- 查询计划和执行工作流程:
- 查看查询计划步骤:
- 将查询计划映射到查询摘要:
- 查询调优的诊断查询: