记录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 相关文章推荐
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
Jul 04 PHP
php之XML转数组函数的详解
Jun 07 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
php防止站外远程提交表单的方法
Oct 20 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 PHP
php实现单笔转账到支付宝功能
Oct 09 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
php实现快速对二维数组某一列进行组装的方法小结
Dec 04 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中加session验证)
2012/08/22 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
python中的全局变量用法分析
2015/06/09 Python
简单的python后台管理程序
2017/04/13 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
python中time.ctime()实例用法
2021/02/03 Python
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
绿化先进工作者事迹材料
2014/01/30 职场文书
研究生导师推荐信
2014/09/06 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS