skillup

技術ブログ

Database

SQL基礎 条件式はunionよりもcaseで

投稿日:

複雑な条件式があったときにcase式を使うことでパフォーマンスを向上させることができます。

※一般にunionを使うよりも高速なことが多い。

例1

ある条件により別の列を使いたいとき、

上記のようにUNIONを使ってしまうとIOコストが倍になってしまうため、ここでCASE式を使って条件分岐を使い、下記のように書いてあげると

条件分岐はWHEREではなくCASEで書いてあげるとうまくいくことが多い。

IOコストは一回で済む。一般にプログラミングでif文を使うような場所で、case式を使ってあげるとうまくいくことが多い。意識としては文から式へ。

主に集計タイプの処理。ある列のパラメーターによって分類をしたり、処理内容を変えるときに有効。

ただしインデックスが張られている列を検索条件にする場合は、unionを使ったほうが高速な場合もある。

参考文献
SQL実践入門

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

sourceコマンドに関して(Linuxサーバー&MySQL)

Linux上ではコマンドをテキストファイルに記述して、

と入力すると命令を実行してくれます。 シェルスクリプトよりもお手軽に実行できる …

no image

JPAまとめ

JPAわけわかんねーと思い、触りはじめてから3か月ぐらいたちます。 いまだに細かい部分はよくわかっていないことは多いのですが、全体像というか何となくどういうものかはわかり始めてきたいのでまとめたいと思 …

no image

データベースアンチパターン・グレーパターンまとめ

本で勉強したものと自分で個人的に経験したことのまとめ Contents1 値渡しと参照渡しの混同2 型の制約が弱い3 変更していいデータ、していけないデータ4 参照系と履歴系のデータを区別する5 リレ …

no image

MySQLのSETとFIND_IN_SETについて

MySQLの方ですが、単純な文字列や、数字、日付の他に配列に近いSET型、また5.7以降ではJSONなどを入れることができます。 Contents1 SET型2 FIND_IN_SET SET型 いわ …

no image

SQL基礎 ウィンドウ関数

SQLの基礎(主にSELECT)を whereはレコードに対しての集計、havingはレコードの集合に対しての集計 ビューは一時的なselect文なのでサブクエリとほぼ等価 条件分岐で出力項目を変えた …