每天清晨,一个pgAgent作业都会从我的PostgreSQL 8.4数据库中的表B中刷新表A的内容。表A在91列中包含约140k记录,并具有两个索引-一个作为PRIMARY KEY的一部分,另一个在POINT PostGIS几何列上的GIST索引。
为了使过程更快一些,作业将删除几何列上的索引,然后删除表A中的记录并从表B中插入记录,然后重新创建索引。autovacuum守护程序在感觉良好时就可以完成所有工作(大约在十分钟后,通过比较作业状态和表状态的作业完成时间和autovacuum运行时间)。
在所有这些都发生之后,今天早上检查表时,表统计信息告诉我表大小为272MB,TOAST表大小为8192bytes,索引大小为23MB。这似乎很大,所以我在表上发出了REINDEX命令,索引大小降至9832kB。
我的问题是这样的:
为什么当从头开始重新构建索引(或至少是几何列索引)时,REINDEX会明显减少索引的大小?我应该确定在建立索引之前已经对表进行了清理/分析吗?这不是在主键上删除索引的一个因素吗?我想念什么?
ANALYZE
报告的尺寸是否也减小了。