在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页。
如何优化SQL语句将那些运行时间比较长的SQL语句找出呢?
MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!
那么如何应用慢查询呢? 一、开启MySQL的慢查询日志功能
show variables like 'slow_query%'; 查询就是否开启慢查询,如图:
默认情况下,MySQL是不会记录超过一定执行时间的SQL语句的。要开启这个功能,我们需要修改MySQL的配置文件:
windows下修改my.ini,Linux下修改my.cnf文件。
在[mysqld]最后增加如下命令: set GLOBAL slow_query_log =ON ; 表示开启慢查询日志功能
set long_query_time = 1; 表示设置慢查询的时间为1S,默认为10S,有查询超过了这个时间,将会被记录到慢查询日志中,高版本的可以设置小数。
slow_query_log_file=c:/slow.log 表示慢查询日志存放的目录文件,默认在mysql的data目录下生成“主机名_slow.log”的文件来存放日志。 上面配置修改好后,重启动MYSQL服务吧!然后开始测试咯! 1、在MYSQL控制台输入命令:select sleep(2) mysql> select sleep(2); +----------+ | sleep(2) | +----------+ | 0| +----------+ 1 row in set (2.00 sec) 2、再查看慢查询的日志文件,会看到以下信息。 # Time: 141014 14:28:52 # User@Host: root[root] @ localhost[::1] Id: 1 # Query_time: 2.000114 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1413268132; select sleep(2);
二、MYSQL数据库查看状态的命令:
show [session|global]status 注:不写默认的为session..session只取出当前会话的状态,global会取出从数据库启动到现在的状态。 show status 查看数据库状态,这里面的状态有很多,DBA应该了解大多数。 show status like ‘uptime’ 数据库启动时间(S) show status like ‘com_select’ 数据库执行了多少次查询 show status like ‘com_update’ 数据库执行了多少次更新 show status like ‘com_delete’ 数据库执行了多少次删除 show status like ‘com_insert’ 数据库执行了多少次插入 show status like 'connections' 试图连接mysql的连接数; 另外可用cmd下的netstat –an查看是那些IP连接到3306上,即连接到MYSQL数据库上。
show status like 'slow_queries'; 慢查询次数。默认情况下,超过10S的为慢查询。控制台下修改MYSQL默认的慢查询时间 show variables like 'long_query_time' 查询默认的慢查询时间 set long_query_time = 1 设置默认的慢查询时间
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。