什么是数据库慢查询?
数据库慢查询,就是查询时间超过了我们设定的时间的语句。可以通过以下语句查看设定的时间:
默认的设定时间是10秒,也可以通过下面这个语句修改默认的设定时间:
set long_query_time=0.0001;
MySQL 慢查询的相关参数解释
slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭
log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。
log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql
慢查询日志配置
默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,可以通过设置slow_query_log的值来开启,如下所示:
show variables like 'slow_query%'; -- 慢查询
show variables like 'long_query_time'; -- 查询时间设置
show variables like '%slow_query_log%';-- 查看慢查询的日志配置
SET GLOBAL slow_query_log = 'ON'; ---开启慢查询日志
show variables like 'log_queries_not_using_indexes'; --查看未使用索引的
set global log_queries_not_using_indexes=1; -- 未使用索引的查询也被记录到慢查询日志中
show global status like '%slow_queries%';-- 查询慢查询记录
最大连接数的查看与设置
查看最大连接数:
show variables like '%max_connections%'; -- 上限连接数
SHOW GLOBAL STATUS LIKE 'Max_used_connections' -- 服务响应的最大连接数
比较理想的设置:Max_used_connections / max_connections * 100% ≈ 85%,即最大连接数占上限连接数的85%左右,如果发现比例在10%以下,MySQL服务器连接数上限设置的过高了。
修改最大连接数:
set GLOBAL max_connections = 500;
列出MySQL服务器运行各种状态值:
SHOW GLOBAL STATUS;
常见的慢查询优化
(1)索引没起到作用的情况(或者未加索引)
- 使用LIKE关键字的查询语句。在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为“%”,索引不会起作用。只有“%”不在第一个位置索引才会起作用。
- 使用多列索引的查询语句。MySQL可以为多个字段创建索引,一个索引最多可以包括16个字段。对于多列索引,只有查询条件使用了这些字段中的第一个字段时,索引才会被使用。
(2)优化数据库表的结构
- 将字段很多的表拆解成多个表。
- 设置中间表。