记录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读取IMAP邮件
Oct 09 PHP
15种PHP Encoder的比较
Mar 06 PHP
php 需要掌握的东西 不做浮躁的人
Dec 28 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
php中隐形字符65279(utf-8的BOM头)问题
Aug 16 PHP
php使用pdo连接mssql server数据库实例
Dec 25 PHP
PHP SOCKET编程详解
May 22 PHP
php实现通过cookie换肤的方法
Jul 13 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
php的hash算法介绍
2014/02/13 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
Python Socket编程之多线程聊天室
2018/07/28 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
python中return不返回值的问题解析
2020/07/22 Python
韩国11街:11STREET
2018/03/27 全球购物
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
GWebs公司笔试题
2012/05/04 面试题
文明学生标兵事迹
2014/01/21 职场文书
函授毕业自我鉴定
2014/02/04 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
政协委员个人总结
2015/03/03 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript