通过搜索优化加速包含标量子查询的查询

标量子查询会返回单个值(一行一列)。如果没有符合返回条件的行,则子查询将返回 NULL。搜索优化服务可以提升包含标量子查询的查询性能。有关子查询的详细信息,请参阅 使用子查询

以下部分提供了有关具有子查询的查询的搜索优化支持的更多信息:

为含标量子查询的查询启用搜索优化

除非为与子查询结果相等的列启用搜索优化,否则包含子查询的查询将不会得到性能提升。要提升表中含标量子查询的查询的性能,请使用 ALTER TABLE ...ADD SEARCH OPTIMIZATION 命令执行以下任一操作:

  • 启用特定列的搜索优化。

  • 为表的所有列启用搜索优化。

通常,最佳做法是仅针对特定列启用搜索优化。使用 ON EQUALITY 子句指定列。此示例允许对特定列进行搜索优化:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON EQUALITY(mycol);
Copy

为所有受支持数据类型(:doc:` 半结构化 </sql-reference/data-types-semistructured>` 和 GEOGRAPHY 除外)指定 EQUALITY:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
Copy

有关更多信息,请参阅 启用和禁用搜索优化

支持的数据类型

搜索优化服务可以提高标量查询在以下数据类型列上的性能:

  • 定点数的数据类型,包括以下内容:

    • 所有 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');
Copy

此查询有一个标量查询,它查询的表不同于外部查询中的表。要提高性能,请确保对 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);
Copy
语言: 中文