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ですが、新規レコードをインサートさせた際IDを取得し、そのIDをもとに何らかのキーを作る、そういう処理があったので紹介させていただきます。 何回か書いてますが、JP …

no image

DBUtils活用 その2

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

no image

SQL case式やウィンドウ関数の威力

プログラマには「プログラムは思った通りに動かない。書いた通りに動く。」「バグではない仕様です」なんて面白い格言がいろいろありますが、データベースの世界にも「WHERE句で条件分岐させるのは素人のやるこ …

no image

JavaでのSQLの書き方

ちょっと小ネタです。 通常SQLを記述する場合、縦に分けて書くのが見た目にも見やすく、保守性も高いです。 例として

と書くよりは、 [ …