pg-index-health-sql: 表结构和索引的健康检测

由 John Doe 五月 13, 2026

pg-index-health-sql 是一组用于分析 PostgreSQL 库表结构、检测数据库问题并推行最佳实践的 SQL 查询脚本合集。

image

项目简介

pg-index-health-sql 提供一系列精选原生 SQL 查询语句,可用于识别 PostgreSQL 数据库中常见的库表结构问题,例如冗余索引、缺失主键、低效表结构等。

该工具无需依赖外部库或框架,可在数据库原生环境中完成轻量级分析,适合直接在 psql 会话、自定义脚本或监控大盘中使用。

支持的 PostgreSQL 版本

  • PostgreSQL 14
  • PostgreSQL 15
  • PostgreSQL 16
  • PostgreSQL 17
  • PostgreSQL 18

对旧版 PostgreSQL 的兼容说明

项目不再保证对更早版本的兼容性,但大概率仍可正常运行。

本项目仅专注维护当前官方仍支持的 PostgreSQL 版本。

更多详情可参阅 PostgreSQL 版本支持策略。

可检测的检查项

pg-index-health-sql 可检测以下 40 类数据库问题:

  1. 无效(损坏)索引(查看 SQL)
  2. 重复索引(完全一致的索引)(查看 SQL)
  3. 交集索引(部分字段重合的索引)(查看 SQL)
  4. 未被使用的索引(查看 SQL)
  5. 无对应索引的外键(查看 SQL)
  6. 包含空值字段的索引(查看 SQL)
  7. 存在索引缺失的表(查看 SQL)
  8. 未设置主键的表(查看 SQL)
  9. 索引膨胀问题(查看 SQL)
  10. 表数据膨胀问题(查看 SQL)
  11. 缺少注释说明的数据表(查看 SQL)
  12. 缺少注释说明的字段(查看 SQL)
  13. 使用 JSON 类型的字段(查看 SQL)
  14. 非主键却使用自增序列类型的字段(查看 SQL)
  15. 缺少注释说明的函数(查看 SQL)
  16. 包含布尔类型字段的索引(查看 SQL)
  17. 存在未生效约束的数据表(查看 SQL)
  18. 数组字段上建立的 B 树索引(查看 SQL)
  19. 序列即将溢出风险(查看 SQL)
  20. 使用自增序列类型的主键(查看 SQL)
  21. 重复外键(完全一致的外键)(查看 SQL)
  22. 交集外键(部分字段重合的外键)(查看 SQL)
  23. 名称存在溢出风险的数据库对象(查看 SQL)
  24. 与其他表无关联关系的数据表(查看 SQL)
  25. 关联字段类型不匹配的外键(查看 SQL)
  26. 仅有 0 个或 1 个字段的数据表(查看 SQL)
  27. 命名不符合规范的数据库对象(查看 SQL)
  28. 命名不符合规范的字段(查看 SQL)
  29. 使用变长字符而非 UUID 类型做主键的表(查看 SQL)
  30. 使用固定长度 varchar(n) 类型的字段(查看 SQL)
  31. 在非空字段上包含多余 WHERE 条件的索引(查看 SQL)
  32. 疑似使用业务自然键作为主键的表(查看 SQL)
  33. 使用 money 货币类型的字段(查看 SQL)
  34. 时间戳字段位于联合索引中间位置的索引(查看 SQL)
  35. 使用 timestamp 时间戳类型的字段(查看 SQL)
  36. 主键字段未排在表字段首位的数据表(查看 SQL)
  37. 除主键外所有字段均可为空的数据表(查看 SQL)
  38. 使用 char(n) 定长字符类型的字段(查看 SQL)
  39. 使用表继承特性的数据表(查看 SQL)
  40. 多字段外键中存在可空关联字段的外键(查看 SQL)

参考

pg-index-health-sql:https://github.com/mfvanek/pg-index-health-sql