mysql查找执行时间过长的SQL语句

启动Mysql时加参数–log-slow-queries来记录执行时间超过long_query_time秒的sql:

/usr/sbin/mysqld –basedir=/usr –datadir=/var/lib/mysql –user=mysql –pid-ile=/var/run/mysqld/mysqld.pid–skip-locking –port=3306 –socket=/var/run/mysqld/mysqld.sock –log-slow-ueries=/var/log/mysql/slow.log

explain来了解SQL执行的状态。

explain select * from wp_posts\G;

使用show status like “Handler_read%”; 来了解索引的效果。

Handler_read_key 值高表示索引效果好,Handler_read_rnd_next值高表示索引低效。

show processlist 查看当前运行状态。

mysql> show processlist;

+—–+————-+——————–+
| Id | User | Host | db | Command | Time| State | Info
+—–+————-+——————–+
|207|root |192.168.0.20:51718 |mytest | Sleep | 5 | | NULL
|208|root |192.168.0.20:51719 |mytest | Sleep | 5 | | NULL
|220|root |192.168.0.20:51731 |mytest |Query | 84 | Locked |

select bookname,culture,value,type from book where id=001
Continue reading mysql查找执行时间过长的SQL语句

使用mysqldumpslow和mysqlsla分析mysql慢查询日志

作者: 老王 原文: http://hi.baidu.com/thinkinginlamp/blog/item/97acfc0319372e81d43f7ca9.html

MySQL优化不是一劳永逸的工作,而是一个持久战。其中慢查询日志的分析是一个重要手段,以前我总是手动大概看看,不过这实在不是长久之计,今天试用了一下mysqldumpslow和mysqlsla,感觉效率高多了。

mysqldumpslow

mysqldumpslow是官方提供的perl脚本,所以你也不用费劲巴拉的安装了,只要有mysql的环境基本就能用:

/path/to/mysqldumpslow -s c

其中参数(-s c)的意思就是按照各种慢查询条数排序。不过mysqldumpslow有一个挺不爽的缺点,就是查询的结果只有一些抽象的SQL,没有可供实际运行的SQL例子。

Continue reading 使用mysqldumpslow和mysqlsla分析mysql慢查询日志

如何开启MySQL慢查询日志

在运营网站的过程中,可能会遇到网站突然变慢的问题,一般情况下和 MySQL 慢有关系,可以通过开启慢查询,找到影响效率的 SQL ,然后采取相应的措施。下面介绍一下如何开启慢查询:

1、开启慢查询

找到 MySQL 的配置文件 ,my.cnf (Windows 为 my.ini ),在 MySQL 下增加下面几行:

long_query_time=2
log-slow-queries= /usr/var/slowquery.log

上面的 2 是查询的时间,即当一条 SQL 执行时间超过2秒的时候才记录,/usr/var/slowquery.log 是日志记录的位置。

Continue reading 如何开启MySQL慢查询日志

Mysql的limit用法的真正含义

1. select * from tablename <条件语句> limit 100,15

从100条记录后开始取15条 (实际取取的是第101-115条数据)

2. select * from tablename <条件语句> limit 100,-1

从第100条后开始-最后一条的记录

3. select * from tablename <条件语句> limit 15

相当于limit 0,15   .查询结果取前15条数据

这是关于limit用法的最常见的解释.

不过由于在实际使用中id自增,所以在认识后面参数的含义上有些问题.由于id一般是auto_increment的.所以我一直以为limit 2,1中的 2的含义是其实id,即id=2的数据.其实2是第2条数据,和id的数值没有任何的关系.

我也是在做北美博客博文推送的时候,我用的是cron跑的程序,一次获取一定数量的数据,跑一次记录下当时结束的id,然后下次再这样跑程序LIMIT 上次结束的id,一定数量.

Continue reading Mysql的limit用法的真正含义

linux下开启mysql慢查询,分析查询语句

一,为什么要开启这个查询呢?

数据库是很容易产生瓶颈的地方,现在Nosql大家讨论这么热,估计都被数据库搞郁闷了。mysql中最影响速度的就是那些查询非常慢的语句,这些慢的语句,可能是写的不够合理或者是大数据下多表的联合查询等等,所以我们要找出这些语句,分析原因,加以优化。这也是发这篇博文的原因

二,开启mysql的慢查询

方法1,用命令开启慢查询

mysql> show variables like "%long%";         //查看一下默认为慢查询的时间10秒  
+-----------------+-----------+  
| Variable_name   | Value     |  
+-----------------+-----------+  
| long_query_time | 10.000000 |  
+-----------------+-----------+  
1 row in set (0.00 sec)  
  
mysql> set global long_query_time=2;          //设置成2秒,加上global,下次进mysql已然生效  
Query OK, 0 rows affected (0.00 sec)  
  
mysql> show variables like "%slow%";          //查看一下慢查询是不是已经开启  
+---------------------+---------------------------------+  
| Variable_name       | Value                           |  
+---------------------+---------------------------------+  
| log_slow_queries    | OFF                             |  
| slow_launch_time    | 2                               |  
| slow_query_log      | OFF                             |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
4 rows in set (0.00 sec)  
  
mysql> set slow_query_log='ON';                        //加上global,不然会报错的。  
ERROR 1229 (HY000): Variable 'slow_query_log' is a GLOBAL variable and should be set with SET GLOBAL  
mysql> set global slow_query_log='ON';            //启用慢查询  
Query OK, 0 rows affected (0.28 sec)  
  
mysql> show variables like "%slow%";              //查看是否已经开启  
+---------------------+---------------------------------+  
| Variable_name       | Value                           |  
+---------------------+---------------------------------+  
| log_slow_queries    | ON                              |  
| slow_launch_time    | 2                               |  
| slow_query_log      | ON                              |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
4 rows in set (0.00 sec)  

Continue reading linux下开启mysql慢查询,分析查询语句

MYSQL中的左连接查询和右连接查询

MYSQL中的左连接查询和右连接查询

以前在学校里上数据库的时候一直以为这个查询很复杂,加上经常偷懒,所以也没去研究.今天突然用到,去google搜索了一下,一目了然.诶,很多东西表面上看起来,或则听上去非常复杂,其实你真正去做过以后才知道,如此而已,just so so ,只不过一开始在想当然罢了.实践才是硬道理呀.

A left join B 的连接的记录数与A表的记录数同
A right join B 的连接的记录数与B表的记录数同
A left join B 等价B right join A

Continue reading MYSQL中的左连接查询和右连接查询

使用左,右,全,内连接及使用where条件语句的区别

从学SQL语句到现在,从来没有使用过左右连接,也许会有人感到惊讶,但是确实是没有,因为我一直是使用的WHERE条件语句。我也想试一下效果,今天做了一下测试,终于知道WHERE条件就只能够做到连接中的内连接功能,因为它不可能把不满足条件的语句显示出来,不过,在大多数的生活实例中肯定是存在的,就像一个人的编号还存在,但是这个人的信息已经被删除掉了,这个编号已经没有实在意义了。
数据库:SQL SERVER 2000
建立任意数据库,并建立表:
create table t1(id int,name varchar(50),teacher int)
create table t2(id int,name varchar(50))
insert into t1 values(1,’aa’,1)
insert into t1 values(2,’bb’,2)
insert into t1 values(3,’cc’,2)
insert into t1 values(4,’aa’,3)
insert into t2 values(1,’张老师’)
insert into t2 values(2,’王老师’)
insert into t2 values(4,’冯老师’)

SQL高级连接查询—内连接,外连接

通常我们不得不从两个或更多的表中选取数据使查询结果更完整。这时便需要使用连接查询(join)。

数据库中的表通过关键字相互关联。主键是所有列中拥有唯一值列。每一个主键值必须是表中唯一,
目的是为了把数跨不同表的数据,在不重复资源的情况下绑定在一起。

下面的”Employees”表中,”Employee_ID”是主键,意味着没有任何两条记录会有相同的Employee_ID值。
它能区别当两个人名字相同时的记录。

Continue reading SQL高级连接查询—内连接,外连接

MySQL Show命令的使用

show tables或show tables from database_name;

解释:显示当前数据库中所有表的名称

show databases;

解释:显示mysql中所有数据库的名称

show processlist;

解释:显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看

他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。

Continue reading MySQL Show命令的使用

返回顶部