UNIONを使ったSQLをチューニングする方法


ここでは、UNIONを使ったSQLをチューニングする方法を紹介します。

UNIONとは

複数のSELECT結果を結合することが出来ます。
SELECT結果を結合するとき、重複する行データは削除されます。つまり同じデータが2件あると1件は削除され、1件だけが残ります。

<SQLの例>
select * from test1
union
select * from test2

UNION ALLとは

UNIONと使い方は同じです。
UNION ALLの場合は重複行を許可します。そのため、同じ行データが2件あったらそのまま2件になります。

<SQLの例>
select * from test1
union all
select * from test2

UNIONとUNION ALLの違いとは

UNIONは重複を削除します。そのため、暗黙的にデータのソートや重複行の削除といった動作が行われます。

データのソートや重複行の削除があるため、UNIONはUNION ALLよりも処理時間がかかり、遅くなります。

チューニングする方法

重複行があってもいい、つまり同じ値の行データが存在してもいいといった場合には重複行を許容する、UNION ALLを使った方がSQLは高速になります。

しかし、プログラムの仕様上、UNIONを使わざるを得ない場合はUNION ALLを使うことが出来ません。

その場合は、UNIONではなく、別の箇所を高速に出来ないか、検討が必要です。例えば、インデックスを作成してデータの抽出にかかる時間を短縮する、などです。

SQLのチューニングについては、「SELECT文のSQLチューニング方法まとめ」で詳しく解説していますので、ぜひ参考にしてください。