[MSSQL]結合クエリのコツ

今回は SQL クエリのパフォーマンス改善のコツです。

クエリの中で、固定値のテーブルを使いたい場合があります。そのときに以下のクエリを使います。

SELECT 1'A'
UNION
SELECT 2'B'

SELECT 1'A'
UNION ALL
SELECT 2'B'

上と下のクエリは同じ結果を返しますが、「UNION ALL」とするだけで内部処理が変わります。以下は Ctrl+L で推定実行プランを表示した結果です。

ふたつのテーブルでレコードが重複しないことが分かっている場合は「UNION ALL」にすれば、パフォーマンスを大きく改善させることができます。今回の1レコードだけの例でも56:44の差が出ます。100レコード規模になるとさらに差が大きくなります。

SELECT id, name FROM sysobjects
UNION
SELECT id, name from syscolumns

SELECT id, name FROM sysobjects
UNION ALL
SELECT id, name from syscolumns