mysql优化手段

2020-04-14  本文已影响0人  百里江山

开启记录所有的SQL

#  查看
show variables like 'general%';
# 设置开启
set GLOBAL general_log='ON';
# 设置记录日志路径 , 不同系统,路径有所不同.
set global general_log_file='D:\\logs\\mysql-select.log'; # window
set global general_log_file='/home/logs/mysql-select.log';# linux 

# 可以选择记录在表里
SET GLOBAL log_output = 'TABLE';

# 可以选择记录文件里(默认)
SET GLOBAL log_output = 'FILE';

以上方法, MYSQL重启失效.

修改my.cnf文件,永久生效.

general_log = 1
general_log_file = /var/log/mysql/general_sql.log

开启慢查询

# 查看
show variables  like '%slow_query_log%';
# 设置开启慢查询
set global slow_query_log=1;
# 设置多长算慢SQL, 单位s
set long_query_time = 1
# 设置慢SQL记录路径 
set global slow_query_log_file ='D:\\logs\\mysql_slow.log'; # window
set global slow_query_log_file ='/home/logs/mysql_slow.log';# linux 

以上方法MYSQL重启失效.
修改my.cnf文件,永久生效

slow_query_log = 1
long_query_time = 1
slow_query_log_file = /home/logs/mysql_slow.log

Explain 分析SQL

explain select * from orders

重要的几个字段

  1. select_type 查询类型
  2. table 查询哪个表
  3. type 访问类型(重要)
  4. possible_keys 可能用到的索引
  5. key 实际用到的索引
  6. ref
  7. rows 扫描行的数量
  8. Extra 执行情况的说明和描述

select_type 表示查询select类型

类型 说明
SIMPLE 简单查询,未使用到联表或子查询
PRIMARY 主查询,即外层的查询
UNION UNION中的第二个或者后面的查询语句
SUBQUERY 子查询中的第一个 子查询中的第一个

type 访问类型, 从上到下,性能由差到最好.

类型 说明
ALL 全表扫描
index 索引全扫描
range 索引范围扫描
ref 非唯一索引扫描
eq_ref 唯一索引扫描
const,system 单表最多有一个匹配行
NULL 不用扫描表或索引

[toc]

Extra 执行情况的说明和描述

类型 说明
Using Index 表示索引覆盖,不会回表查询
Using Where 表示进行了回表查询
Using Index Condition 表示进行了ICP优化
Using Flesort 表示MySQL需额外排序操作, 不能通过索引顺序达到排序效果

什么是ICP,也称下推

Index Condition Pushdown(ICP)

MYSQL5.6之前, 多个条件查询时,会回表查询
MYSQL5.6之后, 不需要再回表查询了,直接分析条件是否满足.

参考

  1. https://www.cnblogs.com/songwenjie/p/9409852.html
上一篇 下一篇

猜你喜欢

热点阅读