Postgresql
據報導,“臃腫”的索引大小是個問題嗎?
我創建了一個包含 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
完成之後,索引掃描將幾乎和以前一樣快。