设为首页 加入收藏

TOP

MYSQL--Profile分析
2014-11-23 23:55:59 来源: 作者: 【 】 浏览:7
Tags:MYSQL--Profile分析

MYSQL--Profile分析
今天在分析一条SQL语句的时候,发现在SQL语句的末尾或者最前面加空格,并不影响直接从QC里面去取结果。
参考手册里是这么说的:
www.2cto.com
查询必须是完全相同的(逐字节相同)才能够被认为是相同的。另外,同样的查询字符串由于其它原因可能认为是不同的。使用不同的 数据库、不同的协议版本或者不同 默认字符集的查询被认为是不同的查询并且分别进行缓存。
既然是要完全相同,那么如下两条SQL应该是不同的
select count(*) from t1 ;
select count(*) from t1 ;
但是在实际运行时,确的当作相同的SQL来执行的
mysql> SHOW PROFILES;
+----------+------------+-----------------------------+
| Query_ID | Duration | Query |
+----------+------------+-----------------------------+
| 1 | 0.00006925 | select count(*) from t1 |
| 2 | 0.08126275 | insert into t1 values(6) |
| 3 | 0.00043675 | select count(*) from t1 |
| 4 | 0.00006850 | select count(*) from t1 |
| 5 | 0.00021075 | select count(*) from t1 |
| 6 | 0.00007150 | select count(*) from t1 |
| 7 | 0.00007300 | select count(*) from t1 |
| 8 | 0.00020975 | select count(*) from t1 |
+----------+------------+-----------------------------+
8 rows in set (0.00 sec) www.2cto.com
而且只是在前后加了空格的SQL语句,就直接从QC里面获取数据了,不再进行优化,执行等操作。
mysql> SHOW PROFILE FOR QUERY 7;
+--------------------------------+----------+
| Status | Duration |
+--------------------------------+----------+
| starting | 0.000022 |
| checking query cache for query | 0.000007 |
| checking privileges on cached | 0.000005 |
| sending cached result to clien | 0.000034 |
| logging slow query | 0.000003 |
| cleaning up | 0.000003 |
+--------------------------------+----------+
6 rows in set (0.00 sec)
在SQL的中间插入空格,才会当作不同的SQL来运行。
mysql> SHOW PROFILE FOR QUERY 8;
+--------------------------------+----------+
| Status | Duration |
+--------------------------------+----------+
| starting | 0.000023 | www.2cto.com
| checking query cache for query | 0.000049 |
| Opening tables | 0.000013 |
| System lock | 0.000005 |
| Table lock | 0.000037 |
| init | 0.000012 |
| optimizing | 0.000006 |
| executing | 0.000012 |
| end | 0.000004 |
| query end | 0.000003 |
| freeing items | 0.000036 |
| storing result in query cache | 0.000006 |
| logging slow query | 0.000003 |
| cleaning up | 0.000002 |
+--------------------------------+----------+
14 rows in set (0.00 sec)
从上面可以得到,QC在存储SQL语句的时候,是去掉了头尾的空格的。而且在查询时,也自动去掉首尾的空格,再到QC里面去比较的。
作者 909413335
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇mysql数据库冷备份时需要注意 下一篇MySQL修改root密码的各种方法整理

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: