PostgreSQL 11生产环境:临时表索引应在ANALYZE前还是后创建?
PostgreSQL 11中临时表索引与ANALYZE的执行顺序建议
应该先创建索引idx_pos_obj_id,再执行ANALYZE tmp_pos_source,原因如下:
- 索引创建完成后再做ANALYZE,能让PostgreSQL收集到包含该索引的完整统计信息。后续查询使用这个临时表时,优化器可以基于这些统计数据,准确判断是否要利用索引生成更高效的执行计划。如果先跑ANALYZE再建索引,统计信息里不会包含新索引的相关数据,优化器可能无法充分发挥索引的性能优势。
- 从资源消耗角度看,创建索引本身会对临时表做一次全表扫描,之后执行ANALYZE的扫描成本不会额外增加;反过来先ANALYZE再建索引,等于多做了一次全表扫描,平白浪费CPU和IO资源。
另外补充:PostgreSQL 11中,临时表的自动统计收集机制不如普通表完善,显式ANALYZE很有必要,但一定要等索引建好后再执行,才能让统计信息覆盖到索引维度。
内容的提问来源于stack exchange,提问作者Gerzzog
相关产品推荐
相关产品推荐

