ここでは、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チューニング方法まとめ」で詳しく解説していますので、ぜひ参考にしてください。