2012-01-19 87 views
7

我是postgres的新手。我有一個名爲host(string varchar2)的列,它有大約2000萬行。如何使用索引來優化我的搜索以查找特定的主機。另外,這個列會每天更新嗎?我是否需要在特定的時間間隔內編寫觸發器索引?如果是的話,我該怎麼做? (爲了記錄我使用Ruby和Rails 3)Postgres索引?

回答

7

假設你正在做的完全匹配,你應該能夠創建索引,讓它:

CREATE INDEX host_index ON table_name (host) 

查詢優化器應該只使用自動。

您可能希望指定其他選項,例如要使用的排序規則。

查看PostgreSQL docs for CREATE INDEX瞭解更多信息。

+0

所以我不需要寫觸發器?當我的記錄更新時,索引是否會更新? –

+2

更新記錄時索引更新。一般規則是,任何索引都會加快檢索速度,但會減慢更新信息的速度。因此選擇索引結構時要小心,它可能會極大地影響更新的性能。 – J0HN

0

我建議使用BRIN Index自PostgreSQL 9.5引入,而不是傳統的btree索引。

0

對於文本搜索,建議您使用GIN或GiST索引類型。

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

另一種可能性是,如果只執行確切在host列匹配,即,沒有不等式比較(><)和涉及部分匹配(like,通配符),則可以考慮轉換host到一個散列整數以顯着加快搜索速度。