skillup

技術ブログ

Database

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

投稿日:

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

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

例1

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

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

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

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

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

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

参考文献
SQL実践入門

-Database
-

執筆者:


comment

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

関連記事

no image

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

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

no image

データベース設計のアンチパターン 複数表結合,大作SQL,Blob型の乱用

データベースのアンチパターンに関して。 以前下記ブログでも書いたんですが設計のスキルに関してもう少し身に着ける必要があるとおもい、チェックします。 論理設計のグレーノウハウ サロゲートキー 論理設計の …

no image

SQLクエリ比較

クエリの比較 SQLにおいては全く同じ結果を返すのであってもその検索結果が異なるということはよくあります。 例えば下記のようなテーブルがあった場合 co_cd | district —&# …

no image

DBUtils活用 その2

以前DBUtilsの活用を書きましたが、他の使い方がわかったのでメモ 以前はSelectでList<エンティティ>を取得したのですが、List<Map>でも取得できます。 ソー …

no image

HAVING句がらみの計算式

「達人に学ぶSQL徹底指南書」読んでますが、かなり難しいものがでてきましたね。 テーブルは前回のものと同じ以下のものを使います。 name | income ————+——– サンプソン | 4000 …

アーカイブ