MySQL 中如何进行 SQL 调优?
回答重点
主要是结合explain
,分析SQL查询的执行计划,找到性能瓶颈,进行优化。
根据慢sql日志,找出需要优化的一些sql语句。
常见优化方向:
合理建立索引,利用联合索引进行覆盖索引的优化,避免回表,以减少一次查询或随机I/O;
避免select *,只查询必要的字段;
避免在sql中进行函数计算等操作,使得无法命中索引;
避免使用%LIKE,导致全表扫描;
注意联合索引需满足最左匹配原则;
非必要不对无索引字段进行排序操作;
联表查询需要注意不同字段的字符集是否一致,否则也会导致全表扫描;
用union all代替union,union去重,排重过程更耗时、耗CPU资源,除特殊场景(如不允许重复)外尽量用union all;
灵活使用limit,如果需求是是否存在符合条件的数据时,可以在sql后追加
慢SQL
通过set global slow_query_log = 'ON'
开启MySQL自带的日志记录,默认为关闭状态。
开启日志,方便后续分析优化。
show variables like '%slow_query_log%'
:查询当前慢日志是否开启,以及存储路径;set global long_query_time = 3
:设置慢SQL的阈值,当一个SQL执行的时间达到3秒,就会被记录到慢日志中。
评论