Postgresql
Postgres - 使用索引插入性能
我們在 Postgres 9.2.10 數據庫中有一個包含大約 20 列的表。為了在某些
SELECT
查詢上獲得更好的性能,我們計劃在一個數據類型為 的列上添加一個索引timestamp
。由於索引也會降低插入的性能,我們做了以下性能測試:我們在表中插入了 500 萬條記錄。這是最大值。我們在生產中預期的記錄數量。然後我們測量了在時間戳列上插入 10000 條帶索引和不帶索引的記錄的時間。這是我們每天預計的最大插入次數,峰值不超過每秒 5 次插入。
結果如下:
- 帶索引 - 84 441 毫秒
- 無索引 - 78 000 ms
至少對於本次測試,該指數僅略微降低了性能。對於我們的要求,我沒有看到添加索引的問題。
但這只是實驗室環境中的一項測試,在生產數據庫上執行時還有其他陷阱嗎?我們是否可以遇到
INSERT
在特定情況下突然需要超過 5 秒的情況?
不,小列上的基本 btree 索引通常維護起來很**便宜。**當然,當表從死行中積累了一些膨脹時,它會稍微貴一些,但差異應該很小。而且您必須考慮在磁碟上為索引提供額外的儲存空間。
有一件事似乎值得一提:以任何方式對索引中涉及的列進行更新都不能使用HOT 更新(“僅堆元組”),因此這可能會增加更改索引列的更新成本。但是,這只會阻止一次內部優化,沒什麼大不了的。並且僅當您在更新中涉及該列時才相關。