国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

記錄mysql性能查詢過程的使用方法

2024-05-04 23:07:47
字體:
來源:轉載
供稿:網友

一切源于一個實驗,請看下面的例子:

表:

復制代碼 代碼如下:


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

具體使用可以參考:

使用方法簡單來說:

復制代碼 代碼如下:


Mysql > set profiling = 1;

Mysql>show profiles;

Mysql>show profile for query 1;


記錄mysql性能查詢過程的使用方法


這個數據中就可以看到MyISAM的Sending data比InnoDB的Sending data費時太多了。查看mysql文檔

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慢。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 翁源县| 玛多县| 永登县| 扶沟县| 温泉县| 科尔| 南丹县| 八宿县| 南开区| 永春县| 灵山县| 和平县| 新干县| 峡江县| 温泉县| 都安| 乌鲁木齐县| 柳州市| 龙井市| 育儿| 五华县| 太白县| 郧西县| 道真| 鄂温| 青岛市| 襄樊市| 双峰县| 恩平市| 汾阳市| 宣汉县| 贵南县| 钟祥市| 左云县| 深水埗区| 新营市| 溧水县| 文昌市| 十堰市| 泸西县| 尉犁县|