由于索引膨胀,我们正在经历许多放缓。在尝试优化索引时,重新创建它似乎会生成一个小得多的索引:
reviews_hotel_id_connection_id_review_date_created_at_review_id
:原始索引
reviews_hotel_id_connection_id_review_date_created_at_new
:原始索引的完全副本,重新创建
reviews | reviews_hotel_id_connection_id_review_date_created_at_review_id | 5296 kB
reviews | reviews_hotel_id_connection_id_review_date_created_at_new | 2944 kB
新索引的大小仅为原索引的 55%!
运行VACUUM ANALYSE reviews
不会导致任何索引减少!
运行VACUUM FULL reviews
使原始索引与新索引具有完全相同的大小:
reviews | reviews_hotel_id_connection_id_review_date_created_at_new | 2944 kB
reviews | reviews_hotel_id_connection_id_review_date_created_at_review_id | 2944 kB
尽管VACUUM FULL
即使读取也会锁定表!是否可以在不导致停机的情况下优化索引?
VACUUM
通常不会收缩表或索引。从 v12 开始,您可以使用
REINDEX CONCURRENTLY
它。之前,您将创建第二个索引
CREATE INDEX CONCURRENTLY
,然后删除旧索引。但这不适用于约束索引。但是在这种情况下,50% 的膨胀对于 b-tree 索引来说是非常正常和健康的,我不会担心它。