1. MySQL索引优化:2025年生产环境实战指南
在2025年的数据库运维领域,MySQL 8.4 LTS已经成为生产环境的主流选择。经过多年版本迭代,索引优化的核心原则虽然保持稳定,但细节处的变化往往决定了系统性能的成败。本文将分享我在大型电商平台数据库优化中总结的实战经验,涵盖从基础设计到高级调优的全套方法论。
重要提示:本文所有案例均基于MySQL 8.4默认配置,部分行为在8.0-8.3版本可能略有差异
1.1 索引设计的黄金法则
1.1.1 区分度优先原则
区分度计算公式:
sql复制SELECT
COUNT(DISTINCT column_name)/COUNT(*) AS selectivity
FROM table_name;
当区分度低于0.1时,单独建立索引通常收益极低。但在联合索引中,低区分度列可以作为次要条件。例如用户订单表中的"支付状态"列(区分度约0.05),单独索引无效,但配合高区分度的user_id时就能发挥过滤作用。
1.1.2 联合索引排列组合
推荐顺序公式:
code复制WHERE等值条件(高区分度) → ORDER BY/GROUP BY字段 → WHERE范围条件 → 其他
实际案例:电商订单查询
sql复制-- 最优索引设计
ALTER TABLE orders ADD INDEX idx_query_opt (
user_id, -- 高频等值查询,区分度0.99
shop_id, -- 次高频等值,区分度0.8
create_time DESC, -- 排序字段
order_status -- 低区分度但高频过滤
);
1.1.3 覆盖索引的威力
覆盖索引可以减少90%以上的I/O操作。通过EXPLAIN查看Extra列出现"Using index"即表示命中覆盖索引。建议将高频查询的SELECT字段都包含在索引中:
sql复制-- 优化前
SELECT order_id, total_price FROM orders WHERE user_id = 100;
-- 优化后索引
ALTER TABLE orders ADD
