Sql 红移-如何识别查询中的低性能区域?

Sql 红移-如何识别查询中的低性能区域?,sql,amazon-redshift,query-performance,Sql,Amazon Redshift,Query Performance,背景:我不熟悉Redshift和PostgreSQL,想知道如何提高查询性能。我需要从执行时间、使用的内存量或我运行的查询的其他相关指标方面得到反馈 问题:是否有一个简单的SQL命令/方法(?)可以(至少大致了解)查询中哪些区域执行时间最长 其他信息:我经常使用如下常见的表表达式: WITH level1 as (SELECT Customerid FROM customer_tbl WHERE year > 2000),

背景:我不熟悉Redshift和PostgreSQL,想知道如何提高查询性能。我需要从执行时间、使用的内存量或我运行的查询的其他相关指标方面得到反馈

问题:是否有一个简单的SQL命令/方法(?)可以(至少大致了解)查询中哪些区域执行时间最长

其他信息:我经常使用如下常见的表表达式:

WITH level1 as (SELECT Customerid 
                FROM customer_tbl
                WHERE year > 2000), 
level2 as (SELECT level1.Customerid,
                  purchasing_tbl.item,
                  purchasing_tbl.price
           FROM level1
           LEFT JOIN purchasing_tbl
                  ON purchasing_tbl.id = level1.Customerid
通常,这种类型的结构可能有10多个级别,其中包含的级别通常要复杂得多(就更多的连接而言,在这种情况下,窗口函数具有不同的聚合)

当试图提高性能时,了解level10与level2相比执行所需的时间会有所帮助


客户端:我使用DBeaver 5.1.1。

STL\u查询是一个红移的系统视图,包含查询计时:

从stl_查询中选择starttime、enddtime、*其中QueryText='' 按starttime desc订购
上限为100

有很多方法可以知道次优查询

下面的链接提供了检查相同内容的不同步骤

AWS提供了一些实用程序,可在GIT Hub中使用

这两种材料在优化查询时都非常有用

问候,,
Rama

在Postgres中,您可以使用
解释(分析)…
但我认为这在Redshifty中不可用,解释在Redshifty中有效。这是一个很好的起点:还有一些检查查询计划的选项-估计值与实际值,包括时间:这些列出了一些系统视图,我也发现它们很有用。@VictorDiLeo似乎就是我要找的!您不会碰巧在示例中的“level2”上使用它,并将其作为答案?我很可能会相信你的回答。有几件事需要注意:在红移中,cte没有具体化。这只是嵌套的捷径(有时CTE可能非常昂贵,除非你意识到生成了什么)。此外,还要确保再次运行sql(以避免计算编译时间),并且没有在红移中使用缓存结果。