使用查询见解提高性能¶
如果存在影响查询性能的条件,Snowflake 会提供有关这些条件的见解。每项见解都包含一条消息,其中解释了查询性能可能受到的影响,并为提高性能提供了一般性建议。
您可以通过查询 QUERY_INSIGHTS 视图 来访问这些见解。
以下各节提供有关查询见解的详细信息:
见解类型列表¶
:doc:` QUERY_INSIGHTS 视图 </sql-reference/account-usage/query_insights>` 提供的见解包括:
关于检测到的条件及其可能对查询性能产生的影响的信息。
关于产生该条件的查询部分的详细信息。
如果该条件对性能产生负面影响,建议采取的下一步措施。
下表按类型 ID 列出了见解的类型。
类型 ID |
见解 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表扫描时未使用筛选器¶
查询或子查询没有 WHERE 子句,这意味着该查询会扫描整个表,并且可能返回比预期更多的行。
为了提高性能,应添加 WHERE 子句以减少扫描的数据量。
筛选器不适用¶
WHERE 子句未筛选出任何行,这意味着查询可能扫描的数据量多于预期。
为了提高性能,应在 WHERE 子句中添加更具选择性的条件,或使现有条件更具选择性。
筛选器选择性低¶
WHERE 子句未显著减少行数,这意味着查询可能扫描的数据量多于预期。
与 筛选器不适用 见解不同,此见解表示 WHERE 子句筛选了一些行,但其选择性本可以更高。
为了提高性能,应在 WHERE 子句中添加更具选择性的条件,或使现有条件更具选择性。
筛选器使用了群集密钥¶
查询受益于对 表的群集密钥 进行筛选。
查询受益于搜索优化¶
查询受益于对已配置为 搜索优化 的列进行筛选。
无联接条件的联接¶
该联接缺少联接条件。结果是一个 交叉联接,返回所有可能的行组合。
为了减少该联接生成的行数,请指定一个或多个联接条件。
爆炸性联接(嵌套联接)¶
如果一个联接包含了至少一个其他联接的输出,那么它:ref:返回的行数会远远多于被联接的表中的实际行数 <label-exploding_join>
。这可能表明子联接的联接条件存在问题。
为了防止联接生成的行数超过参与联接的表的行数,请为子联接添加或更改联接条件。此外,在子联接中使用的子查询中添加 WHERE 子句可能会减少返回的行数。
爆炸性联接(非嵌套)¶
两个数据集(例如表、视图或表函数调用的输出)的联接 返回的行数远多于参与联接的表中的行数。这可能表明联接条件存在问题。
为了防止联接生成的行数超过参与联接的表的行数,请添加或更改联接条件。此外,在此联接使用的子查询中添加 WHERE 子句可能会减少返回的行数。
远程溢出¶
该查询扫描的数据量超过了仓库的存储容量。结果,仓库将 数据溢出 到存储,从而减慢了查询的处理速度。
为防止此问题,请使用容量更大的仓库。如果无法使用更大的仓库,请修改查询以分批处理数据。
限制¶
见解针对针对数据库执行并由仓库处理的 SQL 查询生成。
以下情况不会生成见解:
涉及安全对象的查询。
针对混合表 (Unistore) 执行的查询。
由本地应用程序生成的查询。
EXPLAIN 查询。
重用结果 的查询。