智能索引推荐:少建一个错索引,比多建三个索引更重要
智能索引推荐:少建一个错索引,比多建三个索引更重要
索引推荐是 AI 数据库助手最常见的功能之一。看到慢查询,就建议建索引;看到过滤条件,就建议联合索引。问题是,索引不是免费的。它会增加写入成本、占用空间、影响优化器选择,还可能和已有索引重复。
智能索引推荐的目标不是“多推荐”,而是少建错索引。
一、索引推荐要看全局负载
flowchart TD
A[Query Workload] --> D[Index Advisor]
B[Write Workload] --> D
C[Existing Indexes] --> D
D --> E[Candidate Index]
E --> F[Benefit Cost Review]
只看单条慢查询,很容易给出局部最优建议。一个索引让查询快了 30%,但让写入慢了 20%,未必值得。
二、候选索引要去重
推荐前先检查已有索引是否覆盖。
SHOW INDEX FROM orders;
对于联合索引,左前缀规则要考虑清楚。已有 (user_id, created_at) 时,再建 (user_id) 可能没有必要;但如果排序、覆盖列不同,也不能简单合并。
三、收益要用真实计划验证
AI 可以给候选,但必须通过 hypothetical index、影子库或测试环境验证执行计划。
EXPLAIN FORMAT=JSON
SELECT *
FROM orders
WHERE user_id = ? AND status = ?
ORDER BY created_at DESC
LIMIT 20;
看扫描行数、回表次数、排序方式和代价变化。只看“用了索引”是不够的,用错索引也会慢。
四、写入成本要量化
索引会影响 insert、update、delete。推荐报告里应包含空间估算和写入影响。
index_candidate:
table: orders
columns: [user_id, status, created_at]
estimated_size_gb: 18
affected_write_qps: 3200
expected_query_gain: "p95 -42%"
如果表很大,建索引本身也要考虑 online DDL 风险、复制延迟和回滚方案。
索引推荐还要考虑生命周期。有些索引只为一次活动或一次迁移服务,长期保留会拖累写入。推荐报告可以给出过期时间和复查条件。
index_lifecycle:
owner: "order-team"
review_after: "2026-08-01"
remove_if:
- "query_digest_qps < 1 for 14 days"
- "write_latency_regression > 5%"
数据库里最容易堆积的债,就是“当时很有用”的索引。没有复查机制,索引集合迟早变成化石层。
五、总结
智能索引推荐不能只看单条 SQL。它要结合全局查询负载、写入负载、已有索引、真实执行计划和建索引风险。
少建一个错索引,比多建三个看似有用的索引更重要。数据库优化不是收藏索引,是控制系统整体代价。
所以智能索引推荐的最终输出不应该是“建不建”,而是一份收益、成本、风险、验证和生命周期都清楚的变更建议。
如果这份建议不能说明影响哪些查询、拖慢哪些写入、占用多少空间、怎么回滚,那它还只是一个猜测,不是可以进入生产的索引方案。
生产数据库不缺建议,缺的是能负责的建议。
这也是索引治理的底线。
更多推荐


所有评论(0)