背景
1、产品的问题点
- PG 不支持索引失效(invalid index)功能
2、问题点背后涉及的技术原理
- PG 执行计划会考虑使用索引, 除非这个索引被标记为invalid状态.
- 当数据发生变化时, invalid状态的索引依旧会被更新.
3、这个问题将影响哪些行业以及业务场景
- 通用
4、会导致什么问题?
- 当想临时排除某个索引对某些SQL执行计划的影响时, 只能drop index. 如果DROP后还有其他SQL想用到这个索引又不得不加上, 耗时而且浪费资源.
- 不清楚某个索引是否被用到, 直接DROP的话, 如果索引还要被用到, 再创建索引, 耗时而且浪费资源.
5、业务上应该如何避免这个坑
- 直接修改元数据, 实现invalid索引效果. 《PostgreSQL 改元信息 invalid index》
- 如果只是想清理未使用过的索引, 可以查看 pg_stat_all_indexes、pg_statio_all_indexes 索引统计信息来判断索引是否被使用.
6、业务上避免这个坑牺牲了什么, 会引入什么新的问题
- 改元数据的风险较大
7、数据库未来产品迭代如何修复这个坑
- 建议支持invalid index语法. invalid index 继续保持索引的更新, 随时可以改回valid.