MySQL优化经验总结

线上SQL的调优经验
slow_query_log日志中收集到的慢 SQL ,结合explain分析是否命中索引。- 减少索引扫描行数,有针对性的优化慢 SQL。
- 建立联合索引,由于联合索引的每个叶子节点包含检索字段的信息,按最左前缀原则匹配后,再按其它条件过滤,减少回表的数据量。
- 还可以使用虚拟列和联合索引来提升复杂查询的执行效率。
- 监控sql执行情况,发邮件、短信报警,便于快速识别慢查询sql
- 打开数据库慢查询日志功能
- 简化业务逻辑
- 代码重构、优化
- 异步处理
- sql优化
- 索引优化
SQL优化
分页优化。比如电梯直达,
limit 100000,10先查找起始的主键id,再通过id>#{value}往后取10条尽量使用
覆盖索引,索引的叶节点中已经包含要查询的字段,减少回表查询SQL优化(索引优化、小表驱动大表、虚拟列、适当增加冗余字段减少连表查询、联合索引、排序优化、慢日志 Explain 分析执行计划)。
where子句 避免对字段进行
null值判断、表达式操作等;
where表之间的连接,必须写在其他where条件之前; 可过滤掉最大数量记录的条件必须写在
where子句的末尾,having最后;优先考虑在
where及order by涉及的列上建立索引;避免在索引列上使用函数运算、
is null和is not null;避免使用
select *;使用
union all代替unionexists代替innot exists代替not in连接查询代替子查询;
批量操作
小表驱动大表;
多用limit
in中值太多 分页
增量查询
高效的分页
join表不宜过多
控制索引数量
选择合理的字段类型
提升group by 的效率
索引优化
设计优化(避免使用NULL、用简单数据类型如int、减少 text 类型、分库分表)。
硬件优化(使用SSD 减少 I/O 时间、足够大的网络带宽、尽量大的内存)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Michael's Blog!
评论




