目标
随时间累积的索引拖慢插入吞吐,团队怀疑很多索引从未被查询使用。本配方从统计视图找出扫描次数为零的索引及其体积,优先审查最大的写入放大来源,并在删除前确认该索引不是唯一或主键约束,从而在可控风险下清理无用索引。
步骤要点
- 从 pg_stat_user_indexes 列出扫描为零的索引及其大小。
- 对候选索引检查 indisunique 与 indisprimary。
- 核对一段完整业务周期,避免月末报表类索引被误删。
- 删除后观察写入延迟与热点查询计划是否变化。
SELECT schemaname, relname, indexrelname, idx_scan, pg_size_pretty(pg_relation_size(indexrelid)) AS size
FROM pg_stat_user_indexes
WHERE idx_scan = 0
ORDER BY pg_relation_size(indexrelid) DESC;
排错提示
- 统计若刚重置会误导,需等完整周期。
- 极少使用不等于无用,可能只在月末使用。
- 删除可能拖慢部分报表,需先看执行计划。
适用边界
- 统计可能遗漏极少使用的索引。
- 不覆盖约束维护的索引。