BLOGスタッフブログ

結合とは

システムの上松です。

SQLを書くとき、結合はどうしてますか?
パパパッとプライマリキーで結合して、終わり!  ですか?

同じ結果を返すSQLであっても、内部的なコストが結合条件1つで
大幅に変わることもあります。

たとえばこのSQL

SELECT
     MST.年月
    ,MST.会員ID
    ,MST.氏名
    ,MST.入会日
    ,MST.大会日
    ,MST.会員グループ
    ,MST.コミュニティ番号
    ,GLOG.入室時間
    ,GLOG.退室時間
  FROM
     会員マスタ         MST
    ,グループ参加ログ   GLOG
 WHERE MST.会員ID = ‘A01235678’
   AND MST.会員ID = GLOG.会員ID
   AND GLOG.年月 = ‘201310’
   AND MST.年月 = ‘201310’

さらにもう一つSQL

SELECT
     MST.年月
    ,MST.会員ID
    ,MST.氏名
    ,MST.入会日
    ,MST.大会日
    ,MST.会員グループ
    ,MST.コミュニティ番号
    ,GLOG.入室時間
    ,GLOG.退室時間
  FROM
     会員マスタ         MST
    ,グループ参加ログ   GLOG
 WHERE MST.会員ID = ‘A01235678’
   AND MST.会員ID = GLOG.会員ID
   AND GLOG.年月 = ‘201310’
   AND MAST.年月 = DAYD.年月

年月持ちしている「会員マスタ」と「グループ参加ログ」を結合しているSQLです。
さて、この二つのSQLで実行結果は異なるでしょうか?

実はどちらも同じデータが返ってきます。じゃあどっちでも同じじゃないかいい加減にしろ!

この二つのSQLは、返却されるデータは同じですが、コストが全く異なります。
上のSQLは、下のSQLの10倍のBYTEコストになります。(COSTはほぼ同じです)

BYTEが膨大であれば、読み出し時に参照されるデータ量が多いため「重いSQL」になります。
結合多すぎても少なすぎてもSQLのパフォーマンスに影響を与えます。
例のSQLは、読み出せるデータ量に違いはないので一見すると問題点がわかりづらいのが特徴です。

結合の良しあしは、SQLのチューニングポイントの一つとして覚えておくといいかもしれませんね。

上松 博志が書いた他の記事

見積もり・ご依頼など、
お気軽にご相談ください

本サイトはユーザーエクスペリエンスの向上などを目的に、Cookieを使用しています。
右記のバナーで「同意する」をクリックする、または本サイトを利用することにより、
お客様は弊社のCookieポリシーに同意したことになります。

同意します