2011-07-08 19 views
1

我正在考慮開始使用PostgreSQL數據庫。Postgresql:一列可以有多個索引,根據目的可以使用不同的索引

我經常需要用相同的數據做不同的事情。例如,有時我必須用LIKE搜索相似的字符串,有時我必須檢查一個值是否存在。

在後一種情況下,散列索引是最好的。在前一種情況下,我不確定哪個是最好的,但我確定它不是哈希。

是否可以在同一數據上創建兩種不同類型的索引,然後告訴DB將哪些用作SQL語句的一部分。

我會對任何特定於postgresql的信息感興趣,或者與一般關係型DMS的功能有關。

編輯:我的標題是不正確的:我改變了字hashesindexes

+0

下面的答案在處理多個索引時是正確的。根據你的問題,我只想補充一點 - *不要*在PostgreSQL中使用散列索引。他們目前不是安全的。當然,所有其他的索引類型(btree,gist,杜松子酒)和方法都非常好。 –

回答

3

它可能有多個索引,和Postgres會自動將其認爲是一個最適合您的查詢。

+0

非常感謝,但是在那個決策過程中會出現性能問題嗎?如果可以告訴數據庫使用哪個,會更好嗎?例如如果我必須做2.5億個插入,但在每個插入之前我需要檢查值是否存在,我想可能會因爲不能指定最佳索引而導致性能下降。 – Ankur

+0

對於插入場景,您應該創建一個唯一的索引,並且Pg將爲您完成其餘的工作。如果您在需要使用特殊索引(即全文搜索)的地方有非常獨特的查詢要求,則可以使用正確的索引。 – Flimzy

0

Postgres將使用它的最佳索引和檢查使用哪個索引的開銷最小 - 它甚至不應該是可測量的。您可以使用prepared statements完全消除它。更重要的是在插入和更新數據時管理附加索引所需的時間。

因此,如果您的表經常變化,您應該將索引數量限制爲最小。

如果您的表更改很少或可能會很慢,那麼您可以創建儘可能多的索引。例如在尚未發佈的PostgreSQL 9.1中(但現在有第二個測試版,適合開發),您可以speed up LIKE searches significantly at the cost of slow updates/inserts

相關問題