首页 技术 正文
技术 2022年11月16日
0 收藏 873 点赞 2,701 浏览 2218 个字

在项目开发中,那些开发大佬经常会写出一些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 、慢查询、到底如何玩/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了,打完收工!

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,896
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,423
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,241
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,055
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,684
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,722