51.4. GINの小技

作成と挿入

ほとんどの場合、各値に対して多くのキーが挿入される可能性がありますので、GINインデックスへの挿入は低速です。 ですので、テーブルに対する大量の挿入では、GINインデックスを削除し、大量の挿入が終わった段階で再作成することを勧めます。

gin_fuzzy_search_limit

GINインデックス開発の主な目的は、スケーラビリティが高い全文検索のサポートをPostgreSQLで作成することでした。 全文検索の結果は非常に大規模な結果セットを返します。 さらに、問い合わせが非常に高頻度な単語を持つ場合、こうした状況はよく発生しますが、大規模な結果セットは有用ですらありません。 ディスクから大量のタプルを読み、ソートすることは長い時間がかかりますので、製品レベルでは受け入れられません。 (インデックス検索自体は非常に高速であることに注意してください。)

こうした問い合わせの実行を簡単に制御できるように、GINは返されるセットのサイズに対して設定可能なソフト上限、gin_fuzzy_search_limit設定パラメータを持ちます。 これはデフォルトでは0です(無制限を意味します)。 非0の制限が設定された場合、返されるセットは結果セット全体からランダムに選んだサブセットになります。

"ソフト"は、問い合わせとシステムの乱数生成器の品質に依存して、返される結果の実際の数が指定した上限より多少異なることを意味します。