首页/数据/SQL 速查/找出未使用与冗余索引
性能与执行计划72 条

找出未使用与冗余索引

判断索引是否值得保留:MySQL 用 sys 视图,PostgreSQL 用 pg_stat_user_indexes 的扫描计数。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
-- 实例启动以来未使用的索引
SELECT * FROM sys.schema_unused_indexes;

-- 冗余索引(被其他索引前缀覆盖等)
SELECT * FROM sys.schema_redundant_indexes;

PostgreSQL

PostgreSQL
SELECT relname, indexrelname, idx_scan,
       pg_size_pretty(pg_relation_size(indexrelid)) AS size
FROM pg_stat_user_indexes
ORDER BY idx_scan ASC, pg_relation_size(indexrelid) DESC
LIMIT 20;
统计窗口MySQL 自实例启动累计;PG 的 idx_scan 自统计重置以来累计
低频报表月度报表类索引可能长期显示未使用,不能只看计数
流程先评估查询模式,再用不可见索引验证,最后删除

易错点

  • 按“未使用”直接批量删除:统计窗口未必覆盖完整业务周期,先确认没有周期性查询依赖
  • 忽略索引体积与写入成本:宽索引即使使用率低,也值得评估替换为更窄形式而不是直接删除

数据来源与参考

  • MySQL 8.0 Reference Manual · sys.schema_unused_indexes
  • PostgreSQL Documentation · Monitoring Index Usage
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌