记录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来自动调用不同服务器上的flash
Oct 09 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
php中取得文件的后缀名?
Feb 20 PHP
解析mysql left( right ) join使用on与where筛选的差异
Jun 18 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
php自定义apk安装包实例
Oct 20 PHP
smarty内置函数section的用法
Jan 22 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
PHP实现获取文件mime类型多种方法解析
May 28 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
收音机术语解释
2021/03/01 无线电
php 设计模式之 工厂模式
2008/12/19 PHP
PHP中几个常用的魔术常量
2012/02/23 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
原生JS轮播图插件
2017/02/09 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
Python爬取APP下载链接的实现方法
2016/09/30 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
Python文件路径名的操作方法
2019/10/30 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
护理毕业生自我鉴定
2014/02/11 职场文书
团队激励口号
2014/06/06 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python