[MySQL优化] 如何定位效率较低的SQL
[MySQL优化] -- 如何定位效率较低的SQL
时间:2010-2-28来源:HaCMS开源社区 作者:zhenpao
一般通过以下两种方式定位执行效率较低的 SQL 语句。 慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,包括线程的状态、是否锁表等,可以实时地查 ...
一般通过以下两种方式定位执行效率较低的 SQL 语句。
慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的 执行情况,同时对一些锁表操作进行优化。
下面我们举例说明一下,如何通过慢查询日志定位执行效率底的 SQL 语句:
开启慢查询日志 , 配置样例:
[mysqld]
log-slow-queries
在 my.cnf 配置文件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能生效。慢查询 日志将写入参数 DATADIR (数据目录)指定的路径下,默认文件名是 host_name-slow.log 。
和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。下例中演示了慢查询日志的设置和读取过程。
( 1 )首先查询一下 long_query_time 的值 。
mysql> show variables like 'long%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)
( 2 )为了方便测试,将修改慢查询时间为 5 秒。
mysql> set long_query_time=5;
Query OK, 0 rows affected (0.02 sec)
( 3 )依次执行下面两个查询语句。
第一个查询因为查询时间低于 5 秒而不会出现在慢查询日志中:
mysql> select count(*) from order2008;
+----------+
| count(*) |
+----------+
| 208 |
+----------+
1 row in set (0.00 sec)
第二个查询因为查询时间大于 5 秒而应该出现在慢查询日志中:
mysql> select count(*) from t_user;
+----------+
| count(*) |
+----------+
| 655296
相关文档:
1、编辑MySQL(和PHP搭配之最佳组合)配置文件:
windows环境中:%MySQL(和PHP搭配之最佳组合)_installdir%\my.ini //一般在MySQL(和PHP搭配之最佳组合)安装目录下有my.ini即MySQL(和PHP搭配之最佳组合)的配置文件。
linux环境中:/etc/my.cnf
在[MySQL(和PHP搭配之最佳组合)d]配置段添加如下一行:
skip-grant-tables
......
MYSQL4.1及更高版本支持服务器端准备语句(Prepared Statements), 它使用增强的二进制客户端/服务器协议在客户端和服务器之间高效的发送数据,可以通过支持这种行协议的编程库来访问准备语句,列入MYSQL CAPI,MYSQL Connector/J和MYSQL Connector/NET 为JAVA和.NET提供了同样的访问接口。它也有SQL语言的访问接口。
创建准 ......
mysql 5.0存储过程学习总结
一.创建存储过程
1.基本语法:
create procedure sp_name()
begin
………
end
2.参数传递
二.调用存储过程
1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递
三.删除存储过程
1.基本语法:
drop procedure sp_na ......
#新增一个字段,默认值为0,非空,自动增长,主键
alter table tabelname add new_field_name field_type default 0 not null auto_increment ,add primary key (new_field_name);
#增加一个新字段
alter table tableName add new_field_name field_type;
alter table tableNam ......
目前LAMP (Linux + Apache + MySQL + PHPspan style="font-family: Verdana;">) 近几年来发展迅速,已经成为Web 服务器的事实标准。LAMP这个词的由来最早始于德国杂志“c't Mag
azine”,Michael Kunze在1990年最先把这些项目组合在一起创造了LAMP的缩写字。这些组件虽然并不是开开始就设计为一起使 ......