検索最適化によるスカラーサブクエリによるクエリの高速化

スカラーサブクエリは、単一の値(1行の1列)を返します。返される資格のある行がない場合、サブクエリは NULL を返します。検索最適化サービスは、スカラーサブクエリを含むクエリのパフォーマンスを向上させることができます。サブクエリの詳細情報については、 サブクエリの操作 を参照してください。

以下のセクションでは、サブクエリを含むクエリの検索最適化サポートに関する詳細情報を提供します。

スカラーサブクエリを使用したクエリの検索最適化の実現

サブクエリの結果と等しい列の検索最適化を有効にしない限り、サブクエリを含むクエリは改善されません。テーブルに対するスカラーサブクエリを含むクエリのパフォーマンスを向上させるには、 ALTER TABLE ... ADD SEARCH OPTIMIZATION コマンドを使用して、以下のいずれかを行います。

  • 特定の列の検索最適化を有効にします。

  • テーブルのすべての列の検索最適化を有効にします。

一般的には、特定の列に対してのみ検索最適化を有効にするのがベストプラクティスです。ON EQUALITY 句を使用して列を指定します。この例では、特定の列の検索最適化を可能にしています。

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

(半構造化 データおよび GEOGRAPHY を除く) サポートされているデータ型のすべての列に対して EQUALITY を指定する場合:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
Copy

詳細については、 検索最適化の有効化と無効化 をご参照ください。

サポートされているデータ型

検索最適化サービスでは、以下のデータタイプの列に対するスカラーサブクエリのパフォーマンスを向上させることができます。

他のタイプの値(例えば、 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