skillup

技術ブログ

Database

SQLクエリ比較

投稿日:

クエリの比較

SQLにおいては全く同じ結果を返すのであってもその検索結果が異なるということはよくあります。

例えば下記のようなテーブルがあった場合

co_cd | district
——-+———-
001 | A
002 | B
003 | C
004 | D

co_cd | shop_id | emp_nbr | main_flg
——-+———+———+———-
001 | 1 | 300 | Y
001 | 2 | 400 | N
001 | 3 | 250 | Y
002 | 1 | 100 | Y
002 | 2 | 20 | N
003 | 1 | 400 | Y
003 | 2 | 500 | Y
003 | 3 | 300 | N
003 | 4 | 200 | Y
004 | 1 | 999 | Y

各会社ごとにメインの事業所(main_flg=’Y’)の emp_nbrを出し合い場合、結合で出す場合とサブクエリでテーブル自体を作ってしまってそこから組み立てる2通りの方法があります。

この場合、後者のサブクエリのほうが対象となる絞り込みテーブルが少ないこともあり、高速です。

※詳しくは実行計画をみないとわかりません。

概してサブクエリのほうがスピードがあるようです。

-Database
-

執筆者:


comment

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

関連記事

no image

JPAでのリレーション(アノテーション使用)

JPAでリレーションを管理するとき、最初はアノテーションでやろうとしたんですが、結局やり方がわからずコンストラクタ式をかいて対処してました。 JPAでのリレーションに関して 外部キー制約があるやり方は …

no image

サブクエリ 移動平均など

前回の応用編です。 日付、入出金、残高はできましたが、ここからさらに、現在のレコードから3行以内(3行あれば3行、なければそれ以内でできるだけ)のレコードの合計値を出す計算を考えます。 結果だけ先に書 …

no image

MySQLのマイグレーション(workbench使用)

以前cakePHPにてマイグレーションの手法を紹介したのですが、当然PHP以外をつかっていたり、PHPでもcakeを使っていなければこの方法は通用しません。 何か、汎用的にデータベースの構造の差分がチ …

no image

dbUnitの使い方

えーJavaで有名なテストツールDBUnitについて。 DbUtilではありませんので間違えないように。(私は最初間違えました・・・) まだ全然使い込んでるわけではありませんがどんなことができるかとい …

no image

MySQLのパフォーマンスチェックなどについて

常日頃MySQLをつかっているのですがパフォーマンスのチェックなどをあまりしていなかったため、これをチョクチョクしていこうかなあと思っております。 簡単に使えるツール(ただし5.1.4から)としては標 …