メインセッション SQLチューニング

SQLチューニング
パフォーマンスを考慮したSQL
2009.03.02 まつけん
アジェンダ
データベースのおさらい
SQLについて
SQLのチューニング
データベースのおさらい
データベースを使うシステムは、大きく2つに
分類されます。
・OLTP(オンライントランザクション処理)
WEBアプリケーションのような、処理結果を即時に表示するような
システム
・DWH(データウェアハウス)
半年間の売り上げ上位の商品は?といった集計するためのシステム
SQLについて
概要
データを更新、登録するための言語
標準規格:SQL2003
分類すると以下のパターンに分かれる
QUERY :データ抽出 (SELECT)
DML
:データ操作 (INSERT, UPDATE, DELETE)
DDL
:データ定義 (CREATE , TRUNCATE)
SQLについて
実行イメージ
データベース
SQL
オプティマイザ
①解析フェーズ
実行
計画
②実行フェーズ
③フェッチフェーズ
結果
セット
テーブル
SQLのチューニング
ポイント
SQLの実行回数を減らす
INDEX検索する
FULL検索を速くする
SQLのチューニング
SQLの実行回数を減らす
省略できるものは省略しましょう。
例)修正前
SELECT COUNT(*)
IF(あったら)
UPDATE
ELSE(なかったら)
INSERT
修正後
TRY
INSERT
EXCEPTION(重複エラー)
UPDATE
SQLのチューニング
INDEX検索する
INDEXのイメージ(B-Tree INDEX)
2
1
2
1
5
3
4
5
6
SQLのチューニング
INDEX検索する
メリット
①全体の1割 ~ 2割のデータを抽出する場合に高いパ
フォーマンスが得られる。
SQLのチューニング
INDEX検索する
デメリット
①DMLのパフォーマンスが劣化する。
→ INDEXがない場合と比較すると、3倍~4倍時間がかかることも。
②定期的な縮小が必要になる。
→ 定期的にメンテナンスしないと、サイズが肥大化する。
③抽出対象件数が多くなると、逆に遅くなる。
SQLのチューニング
FULL検索を速くする
FULL検索とは?
テーブルの先頭レコードから、最後(HWM)まで検索する方法
テーブル
HDDの格納領域
HWM
(ハイウォータマーク)
SQLのチューニング
FULL検索を速くする
ポイント
①テーブルをきちんと正規化する。
②巨大なテーブル(履歴テーブル等)は、月度等でテーブル
を分けてしまう。(参照は結合VIEW等で行う)
③定期的にテーブルをTruncateする。
④抽出に必要なキー項目のみをあらかじめ専用テーブルに
退避し、それを基に検索する。
最後に
SQLチューニングの心得
INDEXは、万能ではない。
FULL検索を恐れない、嫌わない。
きちんとテーブルは正規化する。
DELETEは、ごみ箱に捨てているだけ。 実サ
イズは縮小しない事を忘れない。
ご静聴、ありがとうございました。