使用查询见解提高性能¶
如果存在影响查询性能的条件,Snowflake 会提供有关这些条件的见解。每项见解都包含一条消息,其中解释了查询性能可能受到的影响,并为提高性能提供了一般性建议。
You can access these insights in Snowsight and by querying the QUERY_INSIGHTS view.
以下各节提供有关查询见解的详细信息:
见解类型列表¶
The Query Insights pane and The QUERY_INSIGHTS view provide the insights, which include:
关于检测到的条件及其可能对查询性能产生的影响的信息。
关于产生该条件的查询部分的详细信息。
如果该条件对性能产生负面影响,建议采取的下一步措施。
下表按类型 ID 列出了见解的类型。
类型 ID |
见解 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Query benefited from search optimization and Snowflake Optima |
|
|
|
|
|
|
|
|
|
|
|
|
|
表扫描时未使用筛选器¶
查询或子查询没有 WHERE 子句,这意味着该查询会扫描整个表,并且可能返回比预期更多的行。
为了提高性能,应添加 WHERE 子句以减少扫描的数据量。
筛选器不适用¶
WHERE 子句未筛选出任何行,这意味着查询可能扫描的数据量多于预期。
为了提高性能,应在 WHERE 子句中添加更具选择性的条件,或使现有条件更具选择性。
筛选器选择性低¶
WHERE 子句未显著减少行数,这意味着查询可能扫描的数据量多于预期。
与 筛选器不适用 见解不同,此见解表示 WHERE 子句筛选了一些行,但其选择性本可以更高。
为了提高性能,应在 WHERE 子句中添加更具选择性的条件,或使现有条件更具选择性。
筛选器使用了群集密钥¶
查询受益于对 表的群集密钥 进行筛选。
查询受益于搜索优化¶
查询受益于对已配置为 搜索优化 的列进行筛选。
Query benefited from Snowflake Optima¶
The query benefited from Snowflake Optima.
Query benefited from search optimization and Snowflake Optima¶
The query benefited from search optimization and Snowflake Optima.
无联接条件的联接¶
该联接缺少联接条件。结果是一个 交叉联接,返回所有可能的行组合。
为了减少该联接生成的行数,请指定一个或多个联接条件。
爆炸性联接(嵌套联接)¶
如果一个联接包含了至少一个其他联接的输出,那么它:ref:返回的行数会远远多于被联接的表中的实际行数 <label-exploding_join>。这可能表明子联接的联接条件存在问题。
为了防止联接生成的行数超过参与联接的表的行数,请为子联接添加或更改联接条件。此外,在子联接中使用的子查询中添加 WHERE 子句可能会减少返回的行数。
爆炸性联接(非嵌套)¶
两个数据集(例如表、视图或表函数调用的输出)的联接 返回的行数远多于参与联接的表中的行数。这可能表明联接条件存在问题。
为了防止联接生成的行数超过参与联接的表的行数,请添加或更改联接条件。此外,在此联接使用的子查询中添加 WHERE 子句可能会减少返回的行数。
Unnecessary aggregation¶
The DISTINCT or GROUP BY clause produces the same number of rows as the same statement without the DISTINCT or GROUP BY clause. Specifying the clause introduces an additional processing step that has no effect on the result.
To improve performance, remove the unnecessary DISTINCT or GROUP BY clause.
Unnecessary UNION [ DISTINCT ] clause¶
The UNION [ DISTINCT ] clause isn't necessary because the input sets are disjoint.
To improve performance, use UNION ALL, rather than UNION [ DISTINCT ].
远程溢出¶
该查询扫描的数据量超过了仓库的存储容量。结果,仓库将 数据溢出 到存储,从而减慢了查询的处理速度。
为防止此问题,请使用容量更大的仓库。如果无法使用更大的仓库,请修改查询以分批处理数据。
Query was in the queue for the warehouse for too long¶
This query was waiting in the queue for the warehouse for too long.
To avoid this problem, use a larger warehouse that has more capacity, or use a warehouse that has fewer concurrent queries.
在 Snowsight 中查看查询见解¶
在 Query History 下的 查询配置文件 选项卡中,您可以查看查询的洞察信息。具有相应洞察的节点会高亮显示。
右侧的 Query Insights 窗格显示为此查询检测到的每种洞察类型,并列出为该查询检测到的该洞察类型的每个实例。要了解有关检测到的条件的更多信息,请选择 Query Insights 窗格中条目旁边的 View。
详细信息包括为提高查询性能而推荐的后续步骤。您可以选择 Learn more 以查看有关此洞察的更多信息。
限制¶
见解针对针对数据库执行并由仓库处理的 SQL 查询生成。
以下情况不会生成见解:
Queries that potentially benefit from the query acceleration service.
Queries for which the query plan takes multiple steps to finish.
涉及安全对象的查询。
针对混合表 (Unistore) 执行的查询。
由本地应用程序生成的查询。
EXPLAIN 查询。
重用结果 的查询。