2013-08-29 17 views
1
  1. 根據您的經驗,Postresql中每張表的索引數是否有實際限制?理論上,根據documentation,沒有引用:「每個表格的最大索引數量」但是:每張表的索引數

  2. 是不是指數越多查詢越慢?如果我擁有數十甚至數千甚至數千的指數,它會有所作爲嗎?我在閱讀了關於postgres'partial indexes的文檔之後詢問,這讓我想到了一些非常有創意的解決方案,但是需要大量的索引。

回答

5

有開銷在具有幾種不同的方式大量索引:

  1. 空間消耗,雖然這將是與課程的部分指標較低。
  2. 查詢優化,通過優化器計劃的選擇潛力更加複雜。
  3. 表格修改時間,通過在插入新行時修改索引或當前行被刪除或修改時的額外工作。

我傾向於默認去重的索引爲:

  1. 空間通常是相當便宜
  2. 查詢使用綁定變量只需要進行一次優化
  3. 行一般都有被發現比修改它們的次數要多得多,所以設計有效查找行的系統通常比減少對它們進行修改的開銷更重要。
  4. 即使僅偶爾需要索引,缺少必需索引的影響可能非常高。

我已經在一個Oracle系統上進行了非規範化報表的研究,這個報表有超過200個列,其中有100個索引,而且這不是問題。部分索引本來不錯,但Oracle不直接支持它們(你使用了一個相當不方便的CASE hack)。

因此,只要您意識到優點和缺點,我就會繼續併發揮創造力,最好還要測量您對系統的影響。

+0

Reg。 #2綁定變量:當使用部分索引時,優化器必須考慮實際值(以檢查索引定義中的那些值)。此外,PostgreSQL計劃緩存工作與大多數人認爲不同:http://www.postgresql.org/message-id/[email protected] –

+0

@MarkusWinand非常有趣 - 謝謝 –