在项目当中,特别是表里面数据大量的时候,查询非常慢,在复杂的系统中,多表关联查询就更加慢了,这就需要对数据库做优化或者对查询语句做优化,下面讲一下对查询语句做的优化,数据库优化在此先不做讲解。
默认情况下,Mysql是不启动慢查询日志的,这个需要您手工开启。
我使用的mysql版本:5.6.45
运行命令:show variables like '%quer%';
得到如下图所示
# mysql5.6版本以上,取消了参数log_slow_queries,更改为slow_query_log_file.这点需要大家注意一下.
默认这个slow_query_log 是OFF的,您可以使用如下命令开启:set global slow_query_log=1来开启。
并且还要在[mysqld]中添加如下信息:
[mysqld]
log-slow-queries=/var/log/mysql-slow.log
long_query_time = 4
log-queries-not-using-indexes
long_query_time 说明查询时间超过几秒记录到日志。
log-queries-not-using-indexes 记录没有使用索引的查询记录到日志
使用命令再来查看就已经开启了:show variables like '%quer%';
在Mysql5.1之后可以将慢查询的日志记录放到一张表里面。使得我们更加直观的分析日志,慢查询表在mysql架构下定义为slow_log,表结构定义如下;
使用命令:show create table mysql.slow_log;
参数log_output指定了慢查询输出的格式,默认为FILE,我们可以自己设定为table,然后就可以查询mysql架构下的slow_log表了,如下:
show variables like 'log_output';
设置log_output的格式:set global log_output='table';
设置睡眠时间:10秒
select sleep(10);
slow_log表使用的是CSV引擎,对于大量数据(慢查询sql语句太多)查询可能不高,我们可以把它转换为MyISAM引擎来进一步提高查询效率,但是如果您已经启动了慢查询,就会报错。
命令设置引擎:alter table mysql.slow_log engine=myisam;
关闭慢查询就可以执行成功了,如下图