记录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 相关文章推荐
删除无限级目录与文件代码共享
Jul 12 PHP
真正面向对象编程:PHP5.01发布
Oct 09 PHP
?算你??的 PHP 程式大小
Dec 06 PHP
PHP文件读写操作之文件读取方法详解
Jan 13 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
PHP中Array相关函数简介
Jul 03 PHP
Laravel中的Auth模块详解
Aug 17 PHP
Laravel创建数据库表结构的例子
Oct 09 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 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 运行效率总结(提示程序速度)
2009/11/26 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
Ext grid 添加右击菜单
2009/11/26 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
javascript流程控制语句集合
2017/09/18 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
python3.5仿微软计算器程序
2020/03/30 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
python 检查文件mime类型的方法
2018/12/08 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
工作决心书
2014/03/11 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
关于nginx 实现jira反向代理的问题
2021/09/25 Servers