记录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实现ping
Oct 09 PHP
PHP脚本的10个技巧(1)
Oct 09 PHP
怎样在UNIX系统下安装MySQL
Oct 09 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
Discuz论坛密码与密保加密规则
Dec 19 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 PHP
php修改word的实例方法
Nov 17 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实现用户在线时间统计详解
2011/10/08 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python实现定时提取实时日志程序
2018/06/22 Python
python实现俄罗斯方块
2018/06/26 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
夏尔巴人登珠峰品牌:Sherpa Adventure Gear
2018/02/08 全球购物
Java的五个基础面试题
2016/02/26 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
提高EJB性能都有哪些技巧
2012/03/25 面试题
2014最新党员批评与自我批评材料
2014/09/24 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
志愿者事迹材料
2014/12/26 职场文书
考试作弊检讨
2015/01/27 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB
如何优化vue打包文件过大
2022/04/13 Vue.js
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python