2012-01-19 16 views
7

私はpostgresの初心者です。私はhost(文字列varchar2)という名前の列を約2,000万行のテーブルに持っています。特定のホストを見つけるためにインデックスを使用して検索を最適化する方法を教えてください。また、この列は毎日更新され、特定の間隔でトリガーインデックスを作成する必要がありますか?はいの場合、どうすればよいですか?あなたは、正確なマッチをやっていると仮定すると、Postgres Indexing?

答えて

7

(レコードについて、私はRubyとRailsの3を使用しています)、あなただけのインデックスを作成することができるはずですし、それを残す:

CREATE INDEX host_index ON table_name (host) 

クエリオプティマイザはちょうどそれを使用する必要があります自動的に。

使用する照合などの他のオプションを指定することもできます。

詳細については、PostgreSQL docs for CREATE INDEXを参照してください。

+0

私はトリガーを書く必要はありませんか?レコードが更新されるとインデックスが更新されますか? –

+2

レコードが更新されている間、インデックスが更新されます。一般的なルールは、インデックスは検索の速度を上げますが、情報の更新は遅くなります。したがって、索引構造の選択に注意してください。更新のパフォーマンスに劇的な影響を与える可能性があります。 – J0HN

0

私はBRIN Indexを、従来のbtreeインデックスではなくPostgreSQL 9.5からの導入以来使用することをお勧めします。

0

テキスト検索の場合は、GINまたはGiSTインデックスタイプを使用することをお勧めします。

https://www.postgresql.org/docs/9.5/static/textsearch-indexes.html

もう一つの可能​​性は、あなたが唯一の正確な関与host列、すなわち、無不平等の比較(><)と部分一致(like、ワイルドカード)に一致する実行していた場合、あなたはhost変換検討することができるということです検索を大幅に高速化するためにハッシュ整数に変換します。