SQL 高速化の金言

BIサービス SQL高速化の仕組み
 
 SQL高速化 を考えてみます。
2つのレコードを接続するとき
 
例1
 1万行の検査データ と 100行の 品目マスタデータ があり
検査データの 品目コードに 品目マスタの 品目名と標準原価をつなぐ。
 
方法
①LEFT OUTER JOIN
②INNER JOIN
③SELECT句のサブクエリ
 
評価
① 1万行が 各行で 100行の品目マスタを検索するので 100万回の検索が発生する
② 1万行は 100行マスタを1回検索したらJOINできるので、 1万100回の検索でよい(圧倒的に早い)
③ 1万行は 毎回サブクエリを行うので 100万回の検索が発生する
 ただし ②のときは 1万行レコードに 100行マスタに存在しない場合は 削除されてしまうので、注意が必要 
 
 
例2
  1万行の不良結果データと 1万行の検査結果データを結合して、不良率を計算する
  例1から考えると ②INNER JOIN がよさそうですが、
A: INNER JOIN : 1万+1万 の計算
B: UNION接続 + GROUP BY: 不良結果1万 と 検査結果1万を 列並びを同期させて UNIONで合わせ
   それを GROUP BY で 1万行に纏める
このやり方は 掛け算ではなく 足し算になるので、さらに早くなる
 
 なんと B が A の 10倍近い速度(処理時間が 1/10 !!)
 
★金言 ・・・ 
大量データ + 大量データ の 結合には [ UNION 接続 と GROUP BY ]