概要
雰囲気でSQLパフォーマンスチューニングをしていたことを反省し、インデックスについて勉強したことで重要と感じたことをまとめる。
SQLチューニングの前提知識
ざっくりしたインデックスでチューニングするイメージ
ようはどれだけ早く国語辞典から単語を調べることができるか。
国語辞典はあいうえお順でソートされていて"あかさたなはまやらわ"でインデックスが貼られている。
"みかん"を調べたい時は"ま"を探して"ま→み"と探して"み→か"と探す。
インデックスがなければ1ページから探すことになり、大変な手間がかかる。
オプティマイザ(プランナ)
どうやったら一番早く検索できるか考える機能。以下の要素が考慮される。
- テーブルへアクセスする順番
- どのインデックスを使うか
- テーブルのスキャン方式
オプティマイザ統計情報
どんなテーブルなのか分析するための情報。例えば、件数・1レコード長さ・最大値・最小値・ばらつき・Nullの数等。
スキャン方式
テーブルスキャン
データの先頭から末尾まで全てのデータを走査する。
以下のケースで選択される。
- サイズが小さい
- Nullの判定条件がある
- 統計情報のばらつきが少ない
インデックススキャン
辞典の索引と同じ。キーワードをソートして並べてページ番号をふる。Nullに対して無効。
Btreeインデックス
データベースで最も一般的に使用されているインデックス。バランスのとれた木構造で以下の特性をもつ。ようは、辞書の索引のような構造を表現している。
- 各ノードには複数のキーと子ノードへのポインタが含まれる
- ルートノードからリーフノードへのすべてのパスの長さは同じ
- データは順序が保たれ、範囲検索や順次アクセスが高速