用途:分析数据库索引使用情况,找出导致顺序扫描的缺失索引,检测浪费写入性能的冗余或未使用索引,并为 PostgreSQL 与 MySQL 推荐最优索引配置。
主要能力:识别高顺序扫描的表;结合 pg_stat_statements 定位引发顺序扫描的查询;用 EXPLAIN (ANALYZE, BUFFERS) 确认扫描方式;分析 WHERE 与 JOIN 列的选择性;推荐复合索引(等值列在前、范围列在后);识别未使用索引(idx_scan = 0)和前缀重叠的冗余索引;评估部分索引与覆盖索引(INCLUDE,PostgreSQL 11+);估算存储与写入开销,产出优先级报告。
使用方式:需要可访问 pg_stat_user_indexes、pg_stat_user_tables、pg_stat_statements 或 MySQL performance_schema/sys schema 的数据库凭据;PostgreSQL 需启用 pg_stat_statements 扩展;使用 psql 或 mysql CLI 执行分析查询。示例:SELECT relname, seq_scan, seq_tup_read, idx_scan, n_live_tup FROM pg_stat_user_tables WHERE seq_scan > 100 AND n_live_tup > 10000 ORDER BY seq_tup_read DESC LIMIT 20;创建索引使用 CREATE INDEX CONCURRENTLY 避免阻塞写入,删除使用 DROP INDEX CONCURRENTLY。
适用场景:排查接口/查询慢、清理无用索引节省空间、以复合或覆盖索引替换多个单列索引。
限制:需代表性工作负载与至少 24 小时统计积累;索引未被使用时可能需 ANALYZE 或调整 random_page_cost;写密集表建议每表 5–7 个索引以内;统计可能因重置或重启而清空。附加费用、价格及更多平台支持暂未提供。