2012-09-27 41 views
6

我讀過,當在數據庫上有很多索引它可以嚴重傷害性能,但在PostgreSQL文檔中我找不到任何有關它的信息。PostgreSQL SELECT的速度是否受到表上索引過多的負面影響?

我有一個很大的表,有100列和10億行,我經常需要在很多不同的領域做很多搜索。

如果我添加了很多索引(可能是10個唯一列索引和5或7 3列索引),PostgreSQL表的性能是否會下降?

編輯:性能下降我的意思是在提取行(選擇)中的性能,數據庫將每月更新一次,所以更新和插入時間不是問題。

+0

理論上表現寫由於每次寫入索引需要維護,因此對任何RDBMS表的操作都會下降。在這種情況下,我不會認爲文檔中沒有註釋表示沒有性能權衡,總是存在。與往常一樣,分析您的應用程序/數據庫以查看此折衷的確切成本。 –

+5

[你可能想知道的所有關於SQL索引的東西](http://use-the-index-luke.com/) –

+0

數據庫每月會更新一次或類似的東西,所以插入或更新的性能是不是很重要 – Topo

回答

6

當表的內容已經被修改索引維護(即INSERTUPDATEDELETE

的PostgreSQL的查詢規劃可以決定何時使用索引,當是沒有必要的和順序掃描它是更優化的。

因此,索引太多會影響修改性能,而不會影響修改性能。

+0

因此,有很多索引的唯一交易是空間和更新/插入時間? – Topo

+0

@頂部基本上是的。我不希望計劃者被太多索引弄糊塗:) – dezso

+0

是的,不必要的索引不會被查詢計劃者使用。 –

1

索引將不得不更新涉及這些列的每個insertupdate

0

我有一些圖表關於在我的網站:http://use-the-index-luke.com/sql/dml

索引是純粹的冗餘。它僅包含表中還存儲有 的數據。在寫入操作期間,數據庫必須保持這些冗餘一致。具體而言,這意味着插入,刪除 和更新不僅會影響表格,還會影響包含受影響數據的 副本的索引。

章節的標題暗示的影響,該指標可以有:

插入 - 不能採取直接受益於指數

刪除 - 使用索引的where子句

更新 - 不不影響表格的所有指標

+1

如果您要在這裏發佈內容的關鍵部分,並將鏈接返回到您的(免責聲明)網站以獲取更多信息,那將會非常有用。 – PearsonArtPhoto

相關問題