👨‍⚕️

「MENTOR」の原則でインデックス管理

2024/07/17に公開

「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(インデックスのメンテナンスコマンド)

Discussion