记录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中的字符串函数
Nov 24 PHP
php at(@)符号的用法简介
Jul 11 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
PHP多进程编程实例
Oct 15 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
PHP Try-catch 语句使用技巧
Feb 28 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
PHP创建自己的Composer包方法
2018/04/09 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
js+css在交互上的应用
2010/07/18 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
Python多线程和队列操作实例
2015/06/21 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python 字典操作提取key,value的方法
2019/06/26 Python
python实现中文文本分句的例子
2019/07/15 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
J2EE模式面试题
2016/10/11 面试题
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
国际贸易专业推荐信
2013/11/15 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
客户答谢会致辞
2015/07/30 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python