skillup

技術ブログ

Database

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

投稿日:

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

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

例1

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

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

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

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

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

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

参考文献
SQL実践入門

-Database
-

執筆者:


comment

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

関連記事

no image

mavenのリモートリポジトリについて

JPAでO/Rマッパーに慣れてからというもの通常のSQLをごりごり書くのが億劫になってきました。 億劫というかいろいろとリスクがありますね。 問題点としてはコンパイルするときにエラーが検知できなかった …

no image

EXISTSについて

今回はEXISTSについてです。 実務では伝票と明細との検索関連の処理で結構出てきます。 なお、達人に学ぶ~では論理学について少しふれており、この領域を本気で理解する場合は論理学を勉強する必要がありま …

no image

ロック(排他制御)について

ECなどでの開発の場合、当然在庫数によって購入できるか、いなかがかわってきますが、複数人で同時にアクセスする際、処理の整合性を見る必要がでてきますので、ロックのが概念が大事になってきます。 そこでロッ …

no image

データベース設計のアンチパターン リトライ+バッチ分割+バッチの再利用不可

Contents1 リトライ1.1 デメリット1.2 対策2 バッチ分割2.1 デメリット2.2 対策3 バッチ再利用不可3.1 デメリット3.2 対策 リトライ ※OLTP=オンライントランザクショ …

no image

自己結合に関して

以前もこのエントリーで学習しましたが、SQLの結合では自己結合という考え方があります。 下記のようなテーブルProductsがあるとします。 name | price ——&# …

アーカイブ