在项目开发中,那些开发大佬经常会写出一些SQL语句,一条糟糕的SQL语句可能让你测试的整个程序都非常慢,超过10秒的话,我觉得一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比较长的SQL语句找出呢?MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!那么如何应用慢查询呢?

1、开启MySQL的慢查询日志功能
默认情况下,MySQL是不会记录超过一定执行时间的SQL语句的。要开启这个功能,我们需要修改MySQL的配置文件,Windows下修改my.ini,如果是linux的话,需要Linux下修改my.cnf文件,在[mysqld]最后增加如下命令:

slow_query_log
long_query_time = 1

2、测试慢查询日志功能

进入MySql控制台,执行如下语句:

mysql> select sleep(3);
+----------+
| sleep(3) |
+----------+
| 0 |
+----------+
1 row in set (3.01 sec)

是不是感觉非常慢,如果慢 说明已经开启了慢查询

3、注意点

  a、slow_query_log 这句是开启记录慢查询功能,slow_query_log=0关闭;slow_query_log=1开启(这个1可以不写)

  b、long_query_time = 1 这句是记录超过1秒的SQL执行语句

4、如何记录低于1s的慢查询记录呢?

进入MySql控制台,执行如下语句:

mysql>set global long_query_time=0.1   设置记录慢查询超过时间100ms的SQL,记住要重启mysql才能生效!

延伸点:

进入到控制台了,接下来,我们查看下MySQL默认配置中多少秒才算慢查询

mysql> show variables like 'long%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

所以系统默认的慢查询时间上限是10秒

接下来 我们改成1秒

mysql> set long_query_time=1; 注: 我设置了1, 也就是执行时间超过1秒的都算慢查询。
Query OK, 0 rows affected (0.00 sec)

判断MySQL开启慢查询日志记录没有?

mysql> show variables like 'slow%';

 +------------------------------------+-------------------------------+
| Variable_name                      | Value                         |
+------------------------------------+-------------------------------+
| slow_launch_time                   | 2                             |
| slow_query_log                     | OFF                           |
| slow_query_log_always_write_time   | 10.000000                     |
| slow_query_log_file                | /mysql/carry-slow.log |
| slow_query_log_timestamp_always    | OFF                           |
| slow_query_log_timestamp_precision | second                        |
| slow_query_log_use_global_control  |                               |
+------------------------------------+-------------------------------+
7 rows in set (0.00 sec)

从slow_query_log 可以知道开关是关闭状态的,

slow_query_log           是否打开日志记录

slow_query_log_file    日志存放位置

MySQL默认没有开启慢查询,下面我们来开启下:

mysql> set global slow_query_log='ON';
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
mysql>

看来是没权限了啊,于是我去找老大申请了权限

然后再次执行

mysql> set global slow_query_log='ON';
Query OK, 0 rows affected (0.00 sec)

ok了,打完收工!

最新文章

  1. Python之import
  2. hdu 5446 Unknown Treasure Lucas定理+中国剩余定理
  3. access的查询中具体到时间的时候使用“#”
  4. WCF传输Dataset大数据量 -压缩
  5. Linux性能监控分析命令
  6. A Tour of Go Concurrency
  7. [React Native] Error Handling and ActivityIndicatorIOS
  8. 利用PHPExcel转Excel柱形图
  9. 阿里云部署Docker(5)----管理和公布您的镜像
  10. hexo常用命令笔记
  11. Dubbo常用配置文件分析及核心源码阅读(SPI.Extension)
  12. leetcode — longest-common-prefix
  13. solr7.4 tomcat环境下搭建(windows)
  14. 网络抓包神器-Charles使用指南
  15. OSS命令行工具ossutil
  16. 动态规划模板2|LCS最长公共子序列
  17. TPO-20-Apply for the undergraduate research fund
  18. P1776 宝物筛选_NOI导刊2010提高(02)&& 多重背包二进制优化
  19. Dubbo学习笔记1:使用Zookeeper搭建服务治理中心
  20. Vue2 轮播图组件 slide组件

热门文章

  1. 20155230 实验二《Java面向对象程序设计》实验报告
  2. 20155233 2006-2007-2 《Java程序设计》第3周学习总结
  3. 20155319 2016-2017-2 《Java程序设计》第一周学习总结
  4. #20155331 2016-2017-2 《Java程序设计》第3周学习总结
  5. PostgreSQL Streaming Replication的FATAL ERROR
  6. hive 数据导入
  7. 在docker中执行linux shell命令
  8. Siki_Unity_3-8_Lua编程(未完)
  9. Zabbix自动发现之fping
  10. 网络流小结(HNOI2019之前)