MySql优化--慢查日志

慢查日志

顾名思义是MySql针对查询数据时SQL语句执行效率低的监控记录,开发人员可以根据出现的问题优化SQL语句。

分析SQL执行结果

使用MySql慢查日志对有效率问题的SQL进行监控(Windows下):

    //查看慢查日志记录是否开启,OFF 表示未开启
    show variables like 'slow_query_log'

    //查看慢查日志的保存位置
    show variables like 'slow_query_log_file';

    //设置慢查日志的保存位置
    set global slow_query_log_file='[direct_Path]'

    //是否记录没有使用索引的查询SQL语句
    set global log_queries_not_using_indexex=on

    //设置超时的查询语句属于慢查,此处超过 1s 的查询SQL语句则记录为慢查
    set global long_query_time=1

使用mysql官方演示数据库sakila,select查询sakila中的film表,查询出日志存放位置,然后根据文件位置找到并打开日志:

D:\Web\Server\MySQL\mysql-5.6.26-winx64\bin\mysqld, Version: 5.6.26 (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: MySQL
Time                 Id Command    Argument
# Time: 161103 11:03:35
# User@Host: root[root] @ localhost [::1]  Id:   210
# Query_time: 0.015565  Lock_time: 0.000000 Rows_sent: 1000  Rows_examined: 1000
use sakila;
SET timestamp=1478142215;
select * from film;

分析日志:

// 查询执行的时间
# Time: 161103 11:03:35

// 执行SQL的主机信息
# User@Host: root[root] @ localhost [::1]  Id:   210

// SQL执行信息
# Query_time: 0.015565  Lock_time: 0.000000 Rows_sent: 1000  
  Rows_examined: 1000

// 数据库信息
use sakila;

// SQL执行时间
SET timestamp=1478142215;

// 执行的SQL语句
select * from film;

当数据量大时,逐个分析慢查日志的工作量也够呛,分析MySql的慢查日志可以使用提供的两个工具:mysqldumpslow & pt-query-digest;这两个工具其实就是perl脚本,所以在windows下使用则需要安装perl编译器,网盘资源:
http://pan.baidu.com/s/1bpmlZSr – ActivePerl_5.16.2.3010812913.msi
下载安装后,将ActivePerl的bin加入环境变量path中,然后就可以在cmd中使用mysqldumpslow工具了(以后补充pt-query-digest)。

cmd下,输入:

    //获取mysqldumpslow的详细操作命令
    perl mysqldumpslow -h

根据需要使用mysqldumpslow进行日志分析,如:

    > mysqldumpslow.pl -r -s c -a -t > E:/slow.log

相对于mysqldumpslow工具,qt-query-digest的功能显得更加清晰强大,所以建议多多使用qt-query-digest工具分析进行SQL优化。

分析SQL查询

使用explain查询SQL语句的执行计划

    //film中数据共有1000条
    mysql>explain select * from film;

    //SQL语句的执行计划
mysql> explain select * from film;
+----+-------------+-------+------+---------------+------+---------
| id | select_type | table | type | possible_keys | key  | key_len 
| ref  | rows | Extra |
+----+-------------+-------+------+---------------+------+---------
|  1 | SIMPLE      | film  | ALL  | NULL          | NULL | NULL    
| NULL | 1000 | NULL  |
+----+-------------+-------+------+---------------+------+---------

参数分析:
table:显示该行数据属于哪个表
type:重要的列,显示连接使用了何种类型,从性能最好到最差的连接类型为:
const、eq_reg、ref、range、index、ALL
possible_keys:显示可能应用在该表中的索引;若为空,表示没有可能的索引
key:实际使用的索引;若为NULL,则没有使用索引
key_len:使用的索引的长度;在不损失精确性的前提下,长度越短越好
ref:显示索引的哪一列被使用了,若可能的话,是一个常数
rows:MySql认为必须检查的用来返回请求数据的行数
Extra:
- Using filesort:看到这个的时候,说明查询需要优化了。MySql需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
- Using temporary:看到这个的时候,也说明需要优化了。这里,MySql需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上。

错漏望指出,初学不容易。

未完待续……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值