识别可从搜索优化中受益的查询¶
搜索优化可以提高许多查询的性能。本主题介绍搜索优化对哪些查询帮助最大,以及哪些查询 :ref:` 不会从中受益<label-search_optimization_limitations>`。
一般查询特征¶
对于具有以下特征的查询,搜索优化提高其性能的效果最佳:
查询涉及主群集键以外的一列或多列。
查询通常运行几秒钟或更长时间(在应用搜索优化之前)。在大多数情况下,搜索优化不会大幅提高执行时间在亚秒级的查询的性能。
查询筛选器操作访问的列中至少有一列具有 100,000 个或更多不同的值。
若要确定非重复值的数量,可以使用以下任一方法:
使用
APPROX_COUNT_DISTINCT
获取非重复值的近似数量:select approx_count_distinct(column1) from table1;
使用
COUNT(DISTINCT <col_name>)
获取非重复值的实际数量:select count(distinct c1), count (distinct c2) from test_table;
因为只需要非重复值数量的近似值,因此可以考虑使用
APPROX_COUNT_DISTINCT
,它通常比COUNT(DISTINCT <col_name>)
更快、更便宜。
支持的数据类型¶
搜索优化服务目前支持以下数据类型:
定点数(例如 INTEGER、NUMERIC)。
DATE、TIME 和 TIMESTAMP。
VARCHAR。
BINARY。
VARIANT、OBJECT 和 ARRAY。
GEOGRAPHY。
涉及其他类型的值(如 FLOAT、GEOMETRY)的查询不会受益。
支持的谓词类型¶
搜索优化可以提高使用以下类型的谓词进行查询的性能:
其他潜在改进¶
搜索优化还可以提高使用 JOIN 的视图和查询的性能。
视图¶
搜索优化服务可以间接提高视图(包括安全视图)的性能。如果视图的基表启用了搜索优化,并且查询对该表使用选择性谓词,则搜索优化服务可以在筛选行时提高性能。请参阅 支持的谓词类型。
并非视图中的所有表都需要启用搜索优化。每个表都会独立执行搜索优化。
联接¶
搜索优化服务不会直接提高联接的性能。但是,它可以提高在联接之前从任一表中筛选行的性能。当表启用了搜索优化并且谓词是选择性时,(如 支持的谓词类型 部分所述),这种改进就会出现。
两个表都不需要启用搜索优化。使用搜索优化的决定是为每个表单独做出的。
无法从搜索优化中受益的查询¶
目前,搜索优化服务不支持浮点数据类型, GEOMETRY 或其他未讨论过的数据类型。Snowflake 将来可能会添加对更多数据类型的支持。
此外,搜索优化服务不支持以下各项:
外部表。
动态表。
物化视图。
使用 COLLATE 子句 定义的列。
列连接。
分析表达式。
对表列进行强制类型转换(定点数强制转换为字符串除外)。
尽管搜索优化支持对常量值进行隐式和显式强制转换的谓词,但不支持对实际表中的值进行强制类型转换的谓词(从 INTEGER 和 NUMBER 到 VARCHAR 的强制类型转换除外)。
例如,支持以下谓词,因为它们对常量值(不是表列中的值)使用隐式和显式强制类型转换:
-- Supported predicate -- (where the string '2020-01-01' is implicitly cast to a date) WHERE timestamp1 = '2020-01-01'; -- Supported predicate -- (where the string '2020-01-01' is explicitly cast to a date) WHERE timestamp1 = '2020-01-01'::date;
不支持以下谓词,因为对表列中的值使用了强制类型转换:
-- Unsupported predicate -- (where values in a VARCHAR column are cast to DATE) WHERE to_date(varchar_column) = '2020-01-01';
搜索优化服务考虑的是列的原始值,而不是强制类型转换后的值。因此,搜索优化服务不用于使用这些谓词的查询。
如前所述,此规则的例外情况是将表列中的 INTEGER 或 VARCHAR 值强制转换为 NUMBER 值。搜索优化服务确实支持这种类型的谓词:
-- Supported predicate -- (where values in a numeric column are cast to a string) WHERE cast(numeric_column as varchar) = '2'
搜索优化不会提高使用 Time Travel 的查询的性能,因为搜索优化仅适用于活动数据。