MySQL 查询优化完全指南:从原理到实践

MySQL 查询优化完全指南

前言

数据库查询性能是影响应用程序响应速度的关键因素之一。本文将深入探讨 MySQL 查询优化的各种技术和最佳实践。

1. 理解查询执行计划

使用 EXPLAIN 命令是优化查询的第一步:

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

EXPLAIN 输出解读

  • type: 连接类型,从好到差依次是:system > const > eq_ref > ref > range > index > ALL
  • possible_keys: 可能使用的索引
  • key: 实际使用的索引
  • rows: 扫描的行数

2. 索引优化

创建合适的索引

-- 单列索引
CREATE INDEX idx_users_email ON users(email);

-- 复合索引
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);

索引设计原则

  1. 选择性高的列放在前面:选择基数(cardinality)高的列
  2. 考虑查询模式:根据实际查询创建索引
  3. 避免过多索引:每个索引都会增加写操作的开销

3. 查询重写技巧

避免 SELECT *

-- 不好
SELECT * FROM users WHERE id = 1;

-- 好
SELECT id, name, email FROM users WHERE id = 1;

使用 LIMIT 限制结果

-- 添加分页
SELECT * FROM articles ORDER BY published_at DESC LIMIT 20 OFFSET 40;

4. 慢查询监控

启用慢查询日志:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

总结

MySQL 优化是一个持续的过程,需要结合监控、分析和实际测试来不断改进。