system
上松 博志

2015.1.14システム開発 

システムエンジニア

上松 博志

結合とは

システムの上松です。

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のチューニングポイントの一つとして覚えておくといいかもしれませんね。

現役ウェブ解析士が教えるWebサイトの読み解き方 イメージ
システム開発サービスはこちら
ページTOPへ