It all started from an experiment, please see the example below:
Table:
Copy code The code is as follows:
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;
I inserted 300,000 data into two tables (the performance difference during insertion is that InnoDB is slower than MyISAM)
Copy the code The code is as follows:
$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============= ==========' . "rn";
$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 . "rn";
echo '===== =============MyISAM=======================' . "rn";
$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 . "rn";
Return result:
One query can make so much difference! ! InnoDB and MyISAM, quickly analyze why.
First use explain to view
Make sure that no index is used on both sides. The rows queried in the second query, and the query rows of MyISAM are much less than those of InnoDB. On the contrary, the query is slower than InnoDB! ! This Y is a bit strange.
No problem, there is another awesome tool profile
For specific usage, please refer to: http://dev.mysql.com/doc/refman/5.0/en/show-profile.html
How to use it in simple terms:
Copy code The code is as follows:
Mysql > set profiling = 1;
Mysql>show profiles ;
Mysql>show profile for query 1;
You can see from this data that MyISAM’s Sending data is much more time-consuming than InnoDB’s Sending data . View mysql documentation
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 is to read the result of the selection from the disk, and then return the result to the client. This process will involve a large number of IO operations. You can use show profile cpu for query XX; to check and find that MyISAM's CPU_system is much larger than InnnoDB. At this point it can be concluded that MyISAM is slower than InnoDB for table queries (different from queries that can be completed using only indexes).
http://www.bkjia.com/PHPjc/326869.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/326869.htmlTechArticleEverything comes from an experiment, please see the example below: Table: Copy the code The code is as follows: CREATE TABLE IF NOT EXISTS `foo` ( `a` int(10) unsigned NOT NULL AUTO_INCREMENT, `b` int(10) u...