记录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守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
PHP5 的对象赋值机制介绍
Aug 02 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
PHP exif扩展方法开启详解
Jul 28 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
详解WordPress开发中wp_title()函数的用法
Jan 07 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
laravel自定义分页效果
Jul 23 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
Laravel登录失败次数限制的实现方法
Aug 26 PHP
基于PHP实现发微博动态代码实例
Dec 11 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
Python 的描述符 descriptor详解
2016/02/27 Python
python3.5仿微软计算器程序
2020/03/30 Python
Python numpy 点数组去重的实例
2018/04/18 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python基于template实现字符串替换
2020/11/27 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
联想德国官网:Lenovo Germany
2018/07/04 全球购物
宣传标语大全
2014/07/01 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
运动员获奖感言
2014/08/15 职场文书
保研专家推荐信范文
2015/03/25 职场文书
学校世界艾滋病日宣传活动总结
2015/05/05 职场文书
使用Java去实现超市会员管理系统
2022/03/18 Java/Android