首页/数据/数据库速查/索引设计原则清单
性能与调优57 条

索引设计原则清单

索引设计五问:哪些查询是热点?条件列的选择性?排序/分组列能否顺带覆盖?写放大能接受吗?现有索引能否改造而非新增?

数据库速查数据更新于 2026-10-12
  • ① 选择性高(区分度大)的列优先
  • ② 联合索引按「等值 → 范围 → 排序」排布
  • ③ 尽量覆盖高频查询(避免回表)
  • ④ 控制单表索引数量(写代价)
  • ⑤ 冗余索引定期清理((a) 与 (a,b) 不同,但 (a,b) 与 (a,b,c) 常可合并审视)

索引现状盘点

索引现状盘点
SELECT INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS cols,
       MAX(CARDINALITY) AS card, MAX(NON_UNIQUE) AS non_unique
FROM information_schema.statistics
WHERE TABLE_SCHEMA='appdb' AND TABLE_NAME='orders'
GROUP BY INDEX_NAME;
索引不是越多越好:每个索引都是写入成本与磁盘成本,按查询矩阵而非直觉设计。

易错点

  • 为每个查询单建索引:写性能断崖式下跌,最后互相拖累
  • 低选择性列单独建索引(如性别):优化器基本不用,白占地

数据来源与参考

  • MySQL 8.0 Reference Manual: Optimization and Indexes

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌