「MENTOR」の原則でインデックス管理
Measure(測定)
SQLのクエリ実行時間を記録する。→最大のコストがかかっている操作を識別。
スロークエリログ→指定された値より実行時間が長くかかったクエリを記録
PostgreSQL→設定変数「log_min_duration_statement」
Explain(解析)
最もコストがかかるクエリを特定した後は、クエリの処理が遅くなっている原因を解析する。
クエリ実行計画→QEP
QEPレポート例→key列はどのインデックスを適用しているか。Extra列はクエリが一時テーブルで結果をソートしているか、indexを使用しているか確認可能。
解析後、新しいインデックスを作成するかLIKE述語の代わりに全文検索機能を導入する。
Nominate(指名)
クエリのQEPを読んで、クエリがインデックスを使わないでテーブルにアクセスしている箇所を探す。
Test(テスト)
インデックス作成後、再びクエリのプロファイリングを行う。
変更が効果をもたらしたことを確認してから作業を終了する。
「使用頻度の高いテーブルに新たなインデックスを1つ作成すべきだと判断し、重要なクエリ複数でパフォーマンスを38パーセント改善しました」
Optimize(最適化)
キャッシュメモリの検討。
インデックスをあらかじめキャッシュメモリにロードしておく。
例:LOAD INDEX INTO CACHEステートメント
Rebuild(再構築)
長期にわたって行の更新や削除を行うことで、インデックスは次第に断片化していく。
定期的にメンテナンス。
例:VACUUMまたはANALYZE(インデックスのメンテナンスコマンド)