记录mysql性能查询过程的使用方法


Posted in PHP onMay 02, 2013

一切源于一个实验,请看下面的例子:

表:

CREATE TABLE IF NOT EXISTS `foo` ( 
`a` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`b` int(10) unsigned NOT NULL, 
`c` varchar(100) NOT NULL, 
PRIMARY KEY (`a`), 
KEY `bar` (`b`,`a`) 
) ENGINE=InnoDB; CREATE TABLE IF NOT EXISTS `foo2` ( 
`a` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`b` int(10) unsigned NOT NULL, 
`c` varchar(100) NOT NULL, 
PRIMARY KEY (`a`), 
KEY `bar` (`b`,`a`) 
) ENGINE=MyISAM;

我往两个表中插入了30w的数据(插入的时候性能差别InnoDB比MyISAM慢)

<?php $host = '192.168.100.166'; 
$dbName = 'test'; 
$user = 'root'; 
$password = ''; 
$db = mysql_connect($host, $user, $password) or die('DB connect failed'); 
mysql_select_db($dbName, $db); 
echo '===================InnoDB=======================' . "\r\n"; 
$start = microtime(true); 
mysql_query("SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS * FROM foo WHERE b = 1 LIMIT 1000, 10"); 
$end = microtime(true); 
echo $end - $start . "\r\n"; 
echo '===================MyISAM=======================' . "\r\n"; 
$start = microtime(true); 
mysql_query("SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS * FROM foo2 WHERE b = 1 LIMIT 1000, 10"); 
$end = microtime(true); 
echo $end - $start . "\r\n";

返回结果:

记录mysql性能查询过程的使用方法

一次查询就会差别这么多!!InnoDB和MyISAM,赶紧分析分析为什么。

首先是使用explain来进行查看

记录mysql性能查询过程的使用方法

确定两边都没有使用index,第二个查询查的rows,并且MyISAM的查询rows还比InnoDB少这么多,反而是查询慢于InnoDB!!这Y的有点奇怪。

 

没事,还有一个牛掰工具profile

具体使用可以参考:http://dev.mysql.com/doc/refman/5.0/en/show-profile.html

使用方法简单来说:

Mysql > set profiling = 1; Mysql>show profiles; 
Mysql>show profile for query 1;

记录mysql性能查询过程的使用方法
这个数据中就可以看到MyISAM的Sending data比InnoDB的Sending data费时太多了。查看mysql文档

http://dev.mysql.com/doc/refman/5.0/en/general-thread-states.html

 

Sending data

The thread is reading and processing rows for a SELECT statement, and sending data to the client. Because operations occurring during this this state tend to perform large amounts of disk access (reads), it is often the longest-running state over the lifetime of a given query.
 

Sending data是去磁盘中读取select的结果,然后将结果返回给客户端。这个过程会有大量的IO操作。你可以使用show profile cpu for query XX;来进行查看,发现MyISAM的CPU_system比InnnoDB大很多。至此可以得出结论是MyISAM进行表查询(区别仅仅使用索引就可以完成的查询)比InnoDB慢。

PHP 相关文章推荐
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
php导出word格式数据的代码实例
Nov 25 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
php实现中文转数字
Feb 18 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
Jan 13 PHP
php封装的验证码类分享
Feb 26 PHP
PHP getDocNamespaces()函数讲解
Feb 03 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
浅谈PHP中的那些魔术常量
Dec 02 PHP
基于MySQL分区性能的详细介绍
May 02 #PHP
php中使用$_REQUEST需要注意的一个问题
May 02 #PHP
PHP执行批量mysql语句的解决方法
May 02 #PHP
PHP闭包(Closure)使用详解
May 02 #PHP
PHP5中Cookie与 Session使用详解
Apr 30 #PHP
PHP容易忘记的知识点分享
Apr 30 #PHP
基于curl数据采集之正则处理函数get_matches的使用
Apr 28 #PHP
You might like
php 无法载入mysql扩展
2010/03/12 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
尽可能写&quot;友好&quot;的&quot;Javascript&quot;代码
2007/01/09 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
python中Lambda表达式详解
2019/11/20 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
2019史上最全Database工程师题库
2015/12/06 面试题
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
自荐信的两点禁忌
2013/10/30 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
毕业典礼主持词
2015/06/29 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书