MySql调优准备工作
查看慢 SQL 日志是否启用(on 表示启用):
show variables like 'slow_query_log';
查看执行慢于多少秒的 SQL 会记录到日志文件中
show variables like 'long_query_time';
修改MySql的配置文件需要重启服务,但是同命令行不用重启服务,但只是临时性的,关掉后再打开还是原来的配置
常用参数详解
常用的参数详解:
#--是否开启慢查询日志
slow_query_log=1
# --指定保存路径及文件名,默认为数据文件目录,
slow_query_log_file="bxg_mysql_slow.log"
# --指定多少秒返回查询的结果为慢查询
long_query_time=1
# --记录所有没有使用到索引的查询语句
log_queries_not_using_indexes=1
#--记录那些由于查找了多于 1000 次而引发的慢查询
min_examined_row_limit=1000
# --记录那些慢的 optimize table,analyze table 和 alter table 语句
log_slow_admin_statements=1
#--记录由 Slave 所产生的慢查询
log_slow_slave_statements=1
注意:修改以下参数,需要重新启动数据库服务才会生效。
命令行修改:
set global slow_query_log=1; 1代表off 0代表on
set global slow_query_log_file='bxg_mysql_slow.log';
set long_query_time=1;
set global log_queries_not_using_indexes=1;
set global min_examined_row_limit=1000;
set global log_slow_admin_statements=1;
set global log_slow_slave_statements=1;
EXPLAN执行计划
用法
EXPLAN SELECT ..... 经常使用的方式,查看sql执行计划
EXPLAIN select * from student
字段 | 说明 |
---|---|
Id | 查询中执行 select 子句或操作表的顺序 |
Select_type | 所使用的 SELECT 查询类型,包括以下常见类型:SIMPLE、 PRIMARY、SUBQUERY、UNION、DERIVED、UNION RESULT、DEPENDENT、 |
table | 所使用的的数据表的名字 |
type(重要) | 表示 MySQL 在表中找到所需行的方式,又称“访问类型”。 取值按优劣排序 为 NULL>system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL |
Possible_keys | 可能使用哪个索引在表中找到记录 |
key | 实际使用的索引 |
Key_len | 索引中使用的字节数 |
ref | 显示索引的哪一列被使用了 |
rows | 估算的找到所需的记录所需要读取的行数 |
filtered | 通过条件过滤出的行数的百分比估计值 |
extra | 包含不适合在其他列中显示但十分重要的额外信息 |
type中的类型:
ALL代表查询效率太低了,为了查处结果需要去查询全表的语句
index类型:索引类型,全盘扫描索引
range类型:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行
ref类型:一个索引对应多行语句,连接程序无法根据键值只取得一条记录,使用索引的最左前缀或者索引不是 primary key 或 unique 索引的情况。
NULL类型:MySQL 在优化过程中分解语句,