通过搜索优化加速包含标量子查询的查询¶
标量子查询会返回单个值(一行一列)。如果没有符合返回条件的行,则子查询将返回 NULL。搜索优化服务可以提升包含标量子查询的查询性能。有关子查询的详细信息,请参阅 使用子查询。
以下部分提供了有关具有子查询的查询的搜索优化支持的更多信息:
为含标量子查询的查询启用搜索优化¶
除非为与子查询结果相等的列启用搜索优化,否则包含子查询的查询将不会得到性能提升。要提升表中含标量子查询的查询的性能,请使用 ALTER TABLE ...ADD SEARCH OPTIMIZATION 命令执行以下任一操作:
启用特定列的搜索优化。
为表的所有列启用搜索优化。
通常,最佳做法是仅针对特定列启用搜索优化。使用 ON EQUALITY 子句指定列。此示例允许对特定列进行搜索优化:
ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON EQUALITY(mycol);
为所有受支持数据类型(:doc:` 半结构化 </sql-reference/data-types-semistructured>` 和 GEOGRAPHY 除外)指定 EQUALITY:
ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
有关更多信息,请参阅 启用和禁用搜索优化。
支持的数据类型¶
搜索优化服务可以提高标量查询在以下数据类型列上的性能:
定点数的数据类型,包括以下内容:
所有 INTEGER 数据类型,其小数位数为 0。
定点非整数,其小数位数不为 0(如
NUMBER(10,2)
)。定点数的 转换 </sql-reference/data-type-conversion>`(例如 :code:`NUMBER(30, 2)::NUMBER(30, 5))。
:doc:`/sql-reference/data-types-text`(例如 VARCHAR 和 BINARY)。
:doc:`/sql-reference/data-types-datetime`(例如 DATE、TIME 和 TIMESTAMP)。
涉及其他类型的值(例如 VARIANT、FLOAT、GEOGRAPHY 或 GEOMETRY)的子查询不会受益。
支持标量子查询的查询示例¶
以下查询示例展示了搜索优化服务所支持的含标量子查询的查询。
此查询有一个标量查询,它查询的表与外部查询中的表相同。要提高性能,请确保对 employees
表中的 salary
列启用了搜索优化。
SELECT employee_id
FROM employees
WHERE salary = (
SELECT MAX(salary)
FROM employees
WHERE department = 'Engineering');
此查询有一个标量查询,它查询的表不同于外部查询中的表。要提高性能,请确保对 products
表中的 product_id
列启用了搜索优化。
SELECT *
FROM products
WHERE products.product_id = (
SELECT product_id
FROM sales
GROUP BY product_id
ORDER BY COUNT(product_id) DESC
LIMIT 1);