记录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+MYSQL 出现乱码的解决方法
Aug 08 PHP
php 破解防盗链图片函数
Dec 09 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
php需登录的文件上传管理系统
Mar 21 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
Dec 08 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
tp5递归 无限级分类详解
Oct 18 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
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
js动态引入的四种方法
2018/05/05 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
python抓取网页内容示例分享
2014/02/24 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
大专生简历的自我评价
2013/11/26 职场文书
科学发展观活动总结
2014/08/28 职场文书
岗位聘任报告
2015/03/02 职场文书
男人帮观后感
2015/06/18 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技