Postgresql

據報導,“臃腫”的索引大小是個問題嗎?

  • July 22, 2021

我創建了一個包含 100 萬條記錄的表,然後刪除了這些記錄。(常見於某種處理列表。)

CREATE TABLE example (id int PRIMARY KEY);
INSERT INTO example SELECT generate_series(1, 1000 * 1000);
DELETE FROM example;
VACUUM example;

索引大小保持與刪除前相同的大小。

SELECT pg_size_pretty(pg_relation_size(c.oid)) AS size
FROM pg_class c
WHERE oid = 'example_pkey'::regclass;
size  
-------
21 MB
(1 row)

同樣,膨脹檢測查詢(例如ioguix/pgsql-bloat-estimation)將此索引辨識為極度膨脹。

我不關心磁碟使用本身。**指數的表現是否會因規模過大而受到影響?**我應該跑步REINDEX嗎?

刪除行後的前幾個查詢可能會產生重大影響,因為 autovacuum 尚未完成對錶的處理,並且查詢需要探勘大量屬於已刪除行的索引條目。

但是,這些索引掃描會將索引條目標記為“死亡”,後續的索引掃描將忽略它們。

在那之後,在VACUUM完成之後,索引掃描將幾乎和以前一樣快。

引用自:https://dba.stackexchange.com/questions/295969