首先须要使用慢查询功能,去获取全部查询时间比较长的SQL语句mysql
使用explain去查看该sql的执行计划sql
数据库
数据库的查询速度是影响项目性能的重要因素,除了添加缓存中间件外,对于查询自己的优化带来的性能也是不容小觑segmentfault
要想优化查询SQL,就应该先找打须要被优化的SQL语句,MySQL提供了这么一个功能能够帮助咱们快速定位带查询慢的SQL缓存
MySQL的慢查询日志功能:默认关闭,须要手动开启性能优化
查看是否开启慢查询日志功能:show variables like '%slow_query%';服务器
工具
slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。能够不设置该参数,系统则会默认给一个缺省的文件 host_-slow.log性能
下面咱们开启慢查询日志功能:测试
长期有效(修改 :/etc/my.cnf配置文件以下 记得重启mysql生效)
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
临时开启,重启后失效:(测试用)
set global slow_query_log = ON; (开启)
set global long_query_time = 1; (便于测试,设置阀值,后面我改的是配置文件为0.1)
咱们显示查询慢查询的阀值,也就是sql执行时间超过该值就会被记录,单位秒,咱们能够看到是10秒
咱们已经开启了慢查询日志功能,并设置相应的阀值,下面咱们来测试一下:
能够看到已经生效了,可是中途其实仍是出了点小问题,好比在设置阀值的时候失效了,没有设置上,在好比慢查询日志没有写入文件;
上面的日志重要部分解析:
Query_time:这条sql执行的时间
Lock_time:在Mysql服务器阶段等待表锁时间
Rows_sent:查询返回的行数
Rows_examined:查询检查的行数,越长查询的时间越长
(如有侵权,请联系删除)
在上面的慢查询中,咱们已经将查询时间超过阀值的sql语句过滤了出来,下面咱们来具体分析分析是哪里出了问题
Query Profile是MySQL自带的一种Query诊断分析工具,能够完整的显示一条sql执行的各方面的详细信息,默认关闭;
查看是否开启Profile功能:
select @@profiling;
show variables like '%profil%';
能够看到 profiling为 OFF,profiling为0,表示关闭状态,下面咱们将其开启:set profiling=1; (1:开 / 0:关)
再次查看是否打开性能分析工具:select@@profiling; (以前为0)
下面咱们开始准备测试:
第一个被圈中的是咱们要执行的测试sql语句
第二个被圈中的是:以列表形式显示最近发送到服务器上执行的语句的资源使用状况
第三个被圈中的是:咱们刚刚发送到服务器上执行的语句
下面咱们就来看看这条语句的一些信息: show profile for query 4;
这个4就是上面 show profiles中的Query_ID 咱们的测试sql为4
见名知意,对于这条简单的sql而言,可见在刚开始创建链接时和最后返回数据时,所占的时间比列多很大
因此,有链接池和只返回咱们须要的数据便可这么些说法;
合理利用慢查询日志、explain执行计划查询、show profile查看SQL执行时的资源使用状况。对须要优化的语句进行针对性的优化