Home  >  Article  >  Database  >  MySQL MyISAM引擎和InnoDB引擎的性能测试

MySQL MyISAM引擎和InnoDB引擎的性能测试

WBOY
WBOYOriginal
2016-06-07 16:14:06802browse

以下的文章主要介绍的是MySQL MyISAM引擎和InnoDB引擎的性能测试,MyISAM引擎和InnoDB引擎在实际操作中是经常运用到的,以下的文章就是对MySQL MyISAM引擎和InnoDB引擎的性能测试的具体内容的介绍。 [硬件配置] CPU : AMD2500+ (1.8G) 内存: 1G/现代 硬盘: 8

以下的文章主要介绍的是MySQL MyISAM引擎和InnoDB引擎的性能测试,MyISAM引擎和InnoDB引擎在实际操作中是经常运用到的,以下的文章就是对MySQL MyISAM引擎和InnoDB引擎的性能测试的具体内容的介绍。

[硬件配置]

CPU : AMD2500+ (1.8G)

内存: 1G/现代

硬盘: 80G/IDE

[软件配置]

OS : Windows XP SP2

SE : PHP5.2.1

DB : MySQL5.0.37

Web: IIS6

[MySQL表结构]

<ol class="dp-xml">
<li class="alt"><span><span>CREATE TABLE `myisam` (  </span></span></li>
<li><span>`id` int(11) NOT NULL auto_increment,  </span></li>
<li class="alt"><span>`name` varchar(100) default NULL,  </span></li>
<li><span>`content` text,  </span></li>
<li class="alt"><span>PRIMARY KEY (`id`)  </span></li>
<li>
<span>) </span><span class="attribute">ENGINE</span><span>=</span><span class="attribute-value">MyISAM</span><span> DEFAULT </span><span class="attribute">CHARSET</span><span>=</span><span class="attribute-value">gbk</span><span>;  </span>
</li>
<li class="alt"><span>CREATE TABLE `innodb` (  </span></li>
<li><span>`id` int(11) NOT NULL auto_increment,  </span></li>
<li class="alt"><span>`name` varchar(100) default NULL,  </span></li>
<li><span>`content` text,  </span></li>
<li class="alt"><span>PRIMARY KEY (`id`)  </span></li>
<li>
<span>) </span><span class="attribute">ENGINE</span><span>=</span><span class="attribute-value">InnoDB</span><span> DEFAULT </span><span class="attribute">CHARSET</span><span>=</span><span class="attribute-value">gbk</span><span>;  </span>
</li>
<li class="alt"><span> </span></li>
</ol>

[数据内容]

<ol class="dp-xml"><li class="alt"><span><span>$</span><span class="attribute">name</span><span> = “heiyeluren”; </span></span></li></ol>

$content = “MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:· MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MySQL MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置 MySQL默认使用另外一个引擎。 ·MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。

就像MyISAM一 样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。 释:MEMORY存储引擎正式地被确定为HEAP引擎。· InnoDB和BDB存储引擎提供事务安全表。

BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所 有MySQL 5.1二进制分发版里,你可以按照喜好通过配置MySQL来允许或禁止任一引擎。·EXAMPLE存储引擎是一个“存根”引擎,它不做什么。你可以用这个 引擎创建表,但没有数据被存储于其中或从其中检索。

这个引擎的目的是服务,在MySQL源代码中的一个例子,它演示说明如何开始编写新存储引擎。同样,它 的主要兴趣是对开发者。”;

[插入数据-1] (innodb_flush_log_at_trx_commit=1)

MyISAM 1W:3/s

InnoDB 1W:219/s

MyISAM 10W:29/s

InnoDB 10W:2092/s

MySQL MyISAM 100W:287/s

InnoDB 100W:没敢测试

[插入数据-2] (innodb_flush_log_at_trx_commit=0)

MyISAM 1W:3/s

InnoDB 1W:3/s

MyISAM 10W:30/s

InnoDB 10W:29/s

MyISAM 100W:273/s

InnoDB 100W:423/s

[插入数据3] (innodb_buffer_pool_size=1024M)

InnoDB 1W:3/s

InnoDB 10W:33/s

InnoDB 100W:607/s

[插入数据4] (innodb_buffer_pool_size=256M, innodb_flush_log_at_trx_commit=1, set autocommit=0)

InnoDB 1W:3/s

InnoDB 10W:26/s

InnoDB 100W:379/s

[MySQL 配置文件] (缺省配置)

<ol class="dp-xml">
<li class="alt"><span><span># MySQL Server Instance Configuration File  </span></span></li>
<li><span>[client]  </span></li>
<li class="alt">
<span class="attribute">port</span><span>=</span><span class="attribute-value">3306</span><span> </span>
</li>
<li><span>[mysql]  </span></li>
<li class="alt">
<span class="attribute">default-character-set</span><span>=</span><span class="attribute-value">gbk</span><span> </span>
</li>
<li><span>[mysqld]  </span></li>
<li class="alt">
<span class="attribute">port</span><span>=</span><span class="attribute-value">3306</span><span> </span>
</li>
<li>
<span class="attribute">basedir</span><span>=”C:/mysql50/”  </span>
</li>
<li class="alt">
<span class="attribute">datadir</span><span>=”C:/mysql50/Data/”  </span>
</li>
<li>
<span class="attribute">default-character-set</span><span>=</span><span class="attribute-value">gbk</span><span> </span>
</li>
<li class="alt">
<span class="attribute">default-storage-engine</span><span>=</span><span class="attribute-value">INNODB</span><span> </span>
</li>
<li>
<span class="attribute">sql-mode</span><span>=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”  </span>
</li>
<li class="alt">
<span class="attribute">max_connections</span><span>=</span><span class="attribute-value">100</span><span> </span>
</li>
<li>
<span class="attribute">query_cache_size</span><span>=</span><span class="attribute-value">0</span><span> </span>
</li>
<li class="alt">
<span class="attribute">table_cache</span><span>=</span><span class="attribute-value">256</span><span> </span>
</li>
<li>
<span class="attribute">tmp_table_size</span><span>=</span><span class="attribute-value">50M</span><span> </span>
</li>
<li class="alt">
<span class="attribute">thread_cache_size</span><span>=</span><span class="attribute-value">8</span><span> </span>
</li>
<li>
<span class="attribute">myisam_max_sort_file_size</span><span>=</span><span class="attribute-value">100G</span><span> </span>
</li>
<li class="alt">
<span class="attribute">myisam_max_extra_sort_file_size</span><span>=</span><span class="attribute-value">100G</span><span> </span>
</li>
<li>
<span class="attribute">myisam_sort_buffer_size</span><span>=</span><span class="attribute-value">100M</span><span> </span>
</li>
<li class="alt">
<span class="attribute">key_buffer_size</span><span>=</span><span class="attribute-value">82M</span><span> </span>
</li>
<li>
<span class="attribute">read_buffer_size</span><span>=</span><span class="attribute-value">64K</span><span> </span>
</li>
<li class="alt">
<span class="attribute">read_rnd_buffer_size</span><span>=</span><span class="attribute-value">256K</span><span> </span>
</li>
<li>
<span class="attribute">sort_buffer_size</span><span>=</span><span class="attribute-value">256K</span><span> </span>
</li>
<li class="alt">
<span class="attribute">innodb_additional_mem_pool_size</span><span>=</span><span class="attribute-value">4M</span><span> </span>
</li>
<li>
<span class="attribute">innodb_flush_log_at_trx_commit</span><span>=</span><span class="attribute-value">1</span><span> </span>
</li>
<li class="alt">
<span class="attribute">innodb_log_buffer_size</span><span>=</span><span class="attribute-value">2M</span><span> </span>
</li>
<li>
<span class="attribute">innodb_buffer_pool_size</span><span>=</span><span class="attribute-value">159M</span><span> </span>
</li>
<li class="alt">
<span class="attribute">innodb_log_file_size</span><span>=</span><span class="attribute-value">80M</span><span> </span>
</li>
<li>
<span class="attribute">innodb_thread_concurrency</span><span>=</span><span class="attribute-value">8</span><span> </span>
</li>
</ol>

可 以看出在MySQL 5.0里面,MySQL MyISAM和InnoDB存储引擎性能差别并不是很大,针对InnoDB来说,影响性能的主要是 innodb_flush_log_at_trx_commit 这个选项,如果设置为1的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降。

应该是跟刷新日志有关系,设置为0效率能够看到明显提升,当然,同 样你可以SQL中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。另外,还听说通过设置innodb_buffer_pool_size能够提升InnoDB的性能,但是我测试发现没有特别明显 的提升。

基本上我们可以考虑使用InnoDB来替代我们的MyISAM引擎了,因为InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多,当然,相应的在my.cnf中的配置也是比较关键 的,良好的配置,能够有效的加速你的应用。

如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MySQL MyISAM的,这个具体情况可以自己斟酌。


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn