什么是慢查询
就是很慢的查询啦,那多慢才算慢呢?这个你说了算,你要是觉得0.000000000000秒都算慢,那么就是说,你将每一条查询都认为是慢查询。
慢查询有什么用呢
没啥用,如果没有慢查询才好呢
有慢查询的时候,证明该优化数据库或者查询语句了,只是一个相当于日志的概念,没事找事。
查询相关项的开启状态
#查看是否开启慢查询日志 mysql> show variables like 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | OFF | +----------------+-------+ 1 row in set (0.06 sec) #查看是否开启没有使用索引的查询 mysql> show variables like '%log_qu%'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | log_queries_not_using_indexes | OFF | +-------------------------------+-------+ 1 row in set (0.00 sec) #一个查询超过多少秒会被记录到慢查询日志中(如果是0,则表示每条命令都要记录) mysql> show variables like '%long_query%'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.01 sec)
开启慢查询
#开启慢查询 mysql> set global slow_query_log=ON; Query OK, 0 rows affected (0.07 sec) #查看慢查询状态、以及慢查询的日志文件 mysql> show variables like 'slow_query%'; +---------------------+------------------------------------------+ | Variable_name | Value | +---------------------+------------------------------------------+ | slow_query_log | ON | | slow_query_log_file | /usr/local/mysql/data/localhost-slow.log | +---------------------+------------------------------------------+ 2 rows in set (0.00 sec) #设置查询超时时间,此处设为0,表示将每一条命令都记录到慢查询日志中 mysql> set @@long_query_time = 0.000000; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%long_query%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 0.000000 | +-----------------+----------+ 1 row in set (0.00 sec) mysql> set global log_queries_not_using_indexes=on; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'log_queries_not_using_indexes'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | log_queries_not_using_indexes | ON | +-------------------------------+-------+ 1 row in set (0.00 sec)
测试
mysql> select * from category left join goods on category.id=goods.cate_id order by category.id; +----+---------+------+---------+-------------------+ | id | cate | id | cate_id | name | +----+---------+------+---------+-------------------+ | 1 | food | 2 | 1 | water | | 1 | food | 3 | 1 | rice | | 2 | clothes | 1 | 2 | T-shirt | | 3 | book | 4 | 3 | C++ primer | | 4 | sport | 5 | 4 | basketbal | | 5 | music | 0 | 5 | You Are Not Alone | | 6 | video | NULL | NULL | NULL | +----+---------+------+---------+-------------------+ 7 rows in set (0.00 sec) #查看慢查询日志 localhost:~ root# cat /usr/local/mysql/data/localhost-slow.log # Time: 180730 15:54:14 # User@Host: root[root] @ localhost [] Id: 10 # Query_time: 0.000582 Lock_time: 0.000181 Rows_sent: 7 Rows_examined: 20 SET timestamp=1532937254; select * from category left join goods on category.id=goods.cate_id order by category.id;
使用mysqldumpslow
localhost:~ root# mysqldumpslow -t 10 /usr/local/mysql/data/localhost-slow.log Reading mysql slow query log from /usr/local/mysql/data/localhost-slow.log Count: 10 Time=0.00s (0s) Lock=0.00s (0s) Rows=7.0 (70), root[root]@localhost select * from category left join goods on category.id=goods.cate_id order by category.id