検索最適化によるスカラーサブクエリによるクエリの高速化¶
スカラーサブクエリは、単一の値(1行の1列)を返します。返される資格のある行がない場合、サブクエリは NULL を返します。検索最適化サービスは、スカラーサブクエリを含むクエリのパフォーマンスを向上させることができます。サブクエリの詳細情報については、 サブクエリの操作 を参照してください。
以下のセクションでは、サブクエリを含むクエリの検索最適化サポートに関する詳細情報を提供します。
スカラーサブクエリを使用したクエリの検索最適化の実現¶
サブクエリの結果と等しい列の検索最適化を有効にしない限り、サブクエリを含むクエリは改善されません。テーブルに対するスカラーサブクエリを含むクエリのパフォーマンスを向上させるには、 ALTER TABLE ... ADD SEARCH OPTIMIZATION コマンドを使用して、以下のいずれかを行います。
特定の列の検索最適化を有効にします。
テーブルのすべての列の検索最適化を有効にします。
一般的には、特定の列に対してのみ検索最適化を有効にするのがベストプラクティスです。ON EQUALITY 句を使用して列を指定します。この例では、特定の列の検索最適化を可能にしています。
ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON EQUALITY(mycol);
(半構造化 データおよび GEOGRAPHY を除く) サポートされているデータ型のすべての列に対して EQUALITY を指定する場合:
ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
詳細については、 検索最適化の有効化と無効化 をご参照ください。
サポートされているデータ型¶
検索最適化サービスでは、以下のデータタイプの列に対するスカラーサブクエリのパフォーマンスを向上させることができます。
以下を含む 固定小数点数のデータ型
すべての INTEGER データタイプ。スケールは0。
0 以外のスケールを持つ固定小数点非整数(
NUMBER(10,2)
など)。固定小数点数の をキャストします (例:
NUMBER(30, 2)::NUMBER(30, 5)
)。
文字列およびバイナリデータ型 (例えば、 VARCHAR や BINARY)。
日付と時刻のデータ型 (例えば、 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);