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";
返回結果: 一次查詢就會差別這么多!!InnoDB和MyISAM,趕緊分析分析為什么。首先是使用explain來進行查看確定兩邊都沒有使用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;
這個數據中就可以看到MyISAM的Sending data比InnoDB的Sending data費時太多了。查看mysql文檔http://dev.mysql.com/doc/refman/5.0/en/general-thread-states.htmlSending dataThe 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教程