複雑な条件式があったときにcase式を使うことでパフォーマンスを向上させることができます。
※一般にunionを使うよりも高速なことが多い。
例1
ある条件により別の列を使いたいとき、
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT 列1 FROM テーブル1 WHERE 条件文1 UNION SELECT 列2 FROM テーブル1 WHERE 条件文1 |
上記のようにUNIONを使ってしまうとIOコストが倍になってしまうため、ここでCASE式を使って条件分岐を使い、下記のように書いてあげると
1 2 3 4 5 |
SELECT CASE WHEN THEN CASE WHEN THEN FROM テーブル1 |
条件分岐はWHEREではなくCASEで書いてあげるとうまくいくことが多い。
IOコストは一回で済む。一般にプログラミングでif文を使うような場所で、case式を使ってあげるとうまくいくことが多い。意識としては文から式へ。
主に集計タイプの処理。ある列のパラメーターによって分類をしたり、処理内容を変えるときに有効。
ただしインデックスが張られている列を検索条件にする場合は、unionを使ったほうが高速な場合もある。
参考文献
SQL実践入門