インデックスを追加することのコスト/メリットを判断するにはどうすればよいですか?


10

クレイグ・リンガーによると:

通常、参照側の外部キー列(またはそれを含む)にインデックスを作成することをお勧めしますが、必須ではありません。追加するインデックスごとにDML操作が少し遅くなるためINSERTUPDATEまたはごとにパフォーマンスコストが発生しDELETEます。インデックスがめったに使用されない場合、その価値はないかもしれません。

インデックスを追加するメリットがコストを上回るかどうかをどのように判断しますか?

インデックスを追加する前後に単体テストのプロファイルを作成し、全体的なパフォーマンスの向上を確認しますか?それとももっと良い方法がありますか?


pg_stat_user_indexesインデックスの使用に関する情報を示して、これをガイドします。メンテナンスのコストを見積もるには、テーブルの書き込みアクティビティを調べますpg_stat_user_tablesが、HOTのため、すべての更新が必ずしもインデックスに触れる必要があるわけではないため、少し過大評価する可能性があります。
クレイグリンガー

@CraigRinger、それはとても役に立ちます。ありがとうございました!
ギリ2014年

私はpgBadgerにほぼ独占的に依存しています。そして私の腸。
Colin 't Hart

回答:


4

インデックスの使用は、データの構造とデータの選択性によって異なります。使用しないクエリを作成すると、コストが高くなります。それらを効果的に使用する場合、それらは素晴らしいツールです。EXPLAINコマンドのプランニングまたはプランニングと実行(EXPLAIN ANALYZE)のみのクエリプランナーとクエリプランナーアナリティクス()があります。

そして素晴らしいオンラインブックがあります:インデックスの推奨される使用法についてインデックスルークを使用


4
経験則はいいですが、この場合は一般的すぎます。アプリケーションの実際の実行時の動作に基づいてインデックスを追加/削除することを提案する具体的なツール/測定を探しています。
ギリ2014年

多分これはあなたが探しているツールです。enterprisedb.com/products-services-training/products/...
ムラデンUzelac

1

経験則を選び、それに従ってください。たとえば、私は常に外部キーの参照側にインデックスを作成します。

ユーザーのニーズに基づくパフォーマンス基準に対して製品のパフォーマンステストを必ず行ってください。たとえば、システムは1分あたり100 POSTリクエストタイプXの受信負荷を処理する必要があります。

パフォーマンス要件を満たせない場合は、モデルを改良し、そのプロセスの経験則を破る可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.