mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用

mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句。

慢查询配置和使用

在msyqld的启动配置文件或命令行参数中增加以下参数

long_query_time=1

log-slow-queries=/var/mysql/logs/slow.log

long_query_time参数表示的是慢查询的度量时间,单位是秒,最小是1,缺省值是10,凡是执行时间超过long_query_time的sql语句都会记录到慢查询日志中。

--log-slow-queries[=file_name]的file_name参数可选,缺省值是host_name-slow.log,如果指定了file_name参数的话,mysql就会把慢查询的日志记录到file_name所设定的文件中,如果file_name提供的是一个相对路径,mysql会把日志记录到mysql的data目录中。

未使用索引查询配置和使用

在mysql的启动配置文件或命令行参数中增加--log-queries-not-using-indexes 参数就可以启用未使用索引查询语句了,日志记录的文件就是log-slow-queries对应的文件。

//mysql.conf

log-queries-not-using-indexes

使用案例

mysql的配置如下

[mysqld]

#Slow Query log
long_query_time=3

log-slow-queries

# Log queries that is not using indexes
log-queries-not-using-indexes

执行以下命令

select sleep(1);

select sleep(3);

select * from t1;

日志内容如下

D:MySQLMySQL Server 5.1inmysqld, Version: 5.1.31-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time                 Id Command    Argument
# Time: 090625 12:58:09
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 3.000077  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1245905889;
select sleep(3);
# Time: 090625 12:58:42
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.046876  Lock_time: 0.031251 Rows_sent: 0  Rows_examined: 0
SET timestamp=1245905922;
select * from t1;

其他

除此之外还有一些专门的慢查询日志分析、查询工具,大家可以google以下相关的内容。

原文地址:https://www.cnblogs.com/hushaojun/p/4867366.html