记录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之第九天
Oct 09 PHP
基于mysql的bbs设计(四)
Oct 09 PHP
sphinx增量索引的一个问题
Jun 14 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 PHP
解析php类的注册与自动加载
Jul 05 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
php检查日期函数checkdate用法实例
Mar 19 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
PHP实现的方程求解示例分析
Nov 11 PHP
PHP验证码类ValidateCode解析
Jan 07 PHP
Laravel核心解读之异常处理的实践过程
Feb 24 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
一个SQL管理员的web接口
2006/10/09 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
繁简字转换功能
2006/07/19 Javascript
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
python测试驱动开发实例
2014/10/08 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
Python冲顶大会 快来答题!
2018/01/17 Python
python中的常量和变量代码详解
2018/07/25 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
项目建议书范文
2014/05/12 职场文书
患者身份识别制度
2015/08/06 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python
如何Python使用re模块实现okenizer
2022/04/30 Python
Redis 异步机制
2022/05/15 Redis