web-dev-qa-db-ja.com

Postgresインデックスサイズの計算

インデックスを作成する前に、インデックスの(ディスク上の)サイズの大まかな見積もりを決定する方法はありますか?テーブルと各列のサイズは既知です。特にGINインデックスに興味があります。また、さまざまなインデックスタイプのサイズが相互にどのように関連しているかについての情報も歓迎します。 GINインデックスは常にB-TREEインデックスよりも大きいような一般的な経験則はありますか?それとも、データのサイズと分布に依存しすぎていますか?

明確にするために:私はツールを探していません。手作業でできてうれしいです。

2
maax

これに答える一般的な方法はありません(テストサーバーで試してみてください)。 GINはtsvectorやトライグラムなどのさまざまな演算子をサポートしており、それらにはさまざまな特性があります。新しいバージョンでは、GINインデックスは圧縮を使用しています。これは、同じキー値が何度も繰り返し表示される場合に非常に印象的です。ただし、そのレベルの圧縮は、行の順序に依存します。

たとえば、btree_gin GINの拡張)、bツリーインデックス用に2010 MB、GINインデックス用に435 MBを取得します。したがって、GINが常に大きくなるとは限りません。ただし、一般に(つまり、btree_ginを使用する場合を除いて)、G-INでは、b-treeの場合と同じタイプのデータにインデックスを付けないため、サイズを直接比較しても意味がありません。

3
jjanes