テーブルフィルファクターとインデックスフィルファクターの違い


16

Postgresでは、テーブルだけでなくインデックスにもfillfactorを設定できます。違いはなんですか?いずれかの値を決定する方法。ユースケースは何ですか?

空間インデックスで空間リレーションをクラスター化しようとしています。数百万のレコードがあります。毎日新しいレコードが作成されることはほとんどありませんが、レコードは常に更新されます。

ユースケースは空間範囲クエリです。テーブルのfillfactorおよび/またはindex fillfactorの適切な値は何ですか?

回答:


12

TABLEマニュアルページを作成します(強調追加):

テーブルのfillfactorは10〜100のパーセンテージです。100(完全なパッキング)がデフォルトです。より小さなfillfactorが指定されている場合、INSERT操作は指定されたパーセンテージにのみテーブルページをパックします。各ページの残りのスペースは、そのページの行を更新するために予約されています。これにより、UPDATEは行の更新されたコピーを元のページと同じページに配置する機会を与えます。これは、別のページに配置するよりも効率的です。エントリが決して更新されないテーブルの場合、完全なパッキングが最良の選択ですが、頻繁に更新されるテーブルでは、より小さいfillfactorが適切です。

INDEXマニュアルページを作成します(強調は追加しました):

インデックスのfillfactorは、インデックスメソッドがインデックスページをパックする方法を決定する割合です。Bツリーの場合、最初のインデックス作成時、および右側のインデックス(最大キー値)を拡張するときに、リーフページはこの割合で埋められます。その後、ページが完全にいっぱいになると、ページが分割され、インデックスの効率が徐々に低下します。Bツリーはデフォルトの90のfillfactorを使用しますが、10〜100の任意の値を選択できます。テーブルが静的な場合、fillfactor 100はインデックスの物理サイズを最小化するのに最適ですが、頻繁に更新されるテーブルの場合は、ページ分割の必要性を最小化するために小さなfillfactorが適しています。他のインデックスメソッドは、異なるがほぼ類似した方法でfillfactorを使用します。デフォルトのfillfactorはメソッドによって異なります。


1
引用の出典について言及するのが慣例です。簡単に理解できたとしても。
アーウィンブランドステッター

ええ、確か)...時々忘れる

もう少しすみませんでした。マニュアルの現在のバージョンにリンクしてください(特定のマニュアルに対処する必要がない限り)。編集しました。詳細はこちら
アーウィンブランドステッター

リンクは後方にあります。
デイブヨハンセン

2
Re:「テーブルが静的な場合、インデックスの物理サイズを最小化するにはfillfactor 100が最適ですが、頻繁に更新されるテーブルの場合は、ページ分割の必要性を最小限に抑えるには、fillfactorを小さくすることをお勧めします。」「頻繁に更新されるテーブル」のコンテキストを理解しようとする-これは、頻繁に更新される行の値を持つテーブルを意味しますか、それとも頻繁に挿入および/または削除される行を持つテーブルを含むことができますか?行値への変更はほとんどないが、挿入と削除が広範囲に及ぶテーブルが、プリンシパル(キー)インデックスのフィルファクターが低いことでメリットがあるかどうかを知りたかったのです。
-Reinsbrain
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.