<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Totti的部落格]]></title> 
<link>https://iam.ittot.com/index.php</link> 
<description><![CDATA[记录我的生活，收集我的收集]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Totti的部落格]]></copyright>
<item>
<link>https://iam.ittot.com/read.php/.htm</link>
<title><![CDATA[InnoDB和MyISAM]]></title> 
<author>Totti &lt;totti5116@163.com&gt;</author>
<category><![CDATA[收集]]></category>
<pubDate>Sat, 13 Oct 2007 15:11:04 +0000</pubDate> 
<guid>https://iam.ittot.com/read.php/.htm</guid> 
<description>
<![CDATA[ 
	MYSQL数据库目录有个ibdata1文件，InnoDB数据库的内容就是存储在这个表里面。<br/><br/>WordPress就是用的这种存储类型，从我备份网站数据库来说，我更喜欢 MyISAM类型。。。因为每个用户的数据库独立在一个用户文件夹里面，方便恢复。<br/><br/>个人觉得，个人BLOG程序负载不大，MYISAM类型足够应付。<br/><br/>Bo-Blog是用MyISAM类型，国内很多的程序也都是这个MyISAM类型。<br/><br/>不过貌似外国程序比较多用InnoDB数据库类型存储。<br/><br/>InnoDB数据库类型的备份：<br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">如果你可以关闭你的 MySQL 服务，那么可以通过下面几个步骤进行数据库的“二进制”备份：<br/><br/>关闭 MySQL 数据库服务，并确定在关闭时没有发生任何错误 <br/>将你的所有数据文件复制到一个安全的地方 <br/>将所有的 InnoDB 日志文件复制到一个安全的地方 <br/>将 my.cnf 配置文件复制到一个安全的地方 <br/>将所有的 InnoDB 表 .frm 文件复制到一个安全的地方 </div></div><br/><br/>转帖一篇<br/><br/><a href="http://www.360doc.com/showweb/0/0/767171.aspx" target="_blank">http://www.360doc.com/showweb/0/0/767171.aspx</a><br/><strong>InnoDB和MyISAM的差别</strong> <br/><br/>InnoDB和MyISAM是在使用MySQL最常用的两个表类型，各有优缺点，视具体应用而定。基本的差别为：MyISAM类型不支持事务处理等高级处理，而InnoDB类型支持。MyISAM类型的表强调的是性能，其执行数度比InnoDB类型更快，但是不提供事务支持，而InnoDB提供事务支持已经外部键等高级数据库功能。<br/><br/>MyIASM是IASM表的新版本，有如下扩展：&nbsp;&nbsp;<br/>二进制层次的可移植性。&nbsp;&nbsp;<br/>NULL列索引。&nbsp;&nbsp;<br/>对变长行比ISAM表有更少的碎片。&nbsp;&nbsp;<br/>支持大文件。&nbsp;&nbsp;<br/>更好的索引压缩。&nbsp;&nbsp;<br/>更好的键吗统计分布。&nbsp;&nbsp;<br/>更好和更快的auto_increment处理。&nbsp;&nbsp;<br/><br/>1.MySQL最大的优势在于MyISAM引擎下的简单SELECT，INSERT和UPDATE快速操作<br/>2.MyISAM类型的数据文件可以在不同操作系统中COPY，这点很重要，布署的时候方便点。<br/><br/>以下是一些细节和具体实现的差别：<br/><br/>1.InnoDB不支持FULLTEXT类型的索引。<br/>2.InnoDB 中不保存表的具体行数，也就是说，执行select count(*) from table时，InnoDB要扫描一遍整个表来计算有多少行，但是MyISAM只要简单的读出保存好的行数即可。注意的是，当count(*)语句包含 where条件时，两种表的操作是一样的。<br/>3.对于AUTO_INCREMENT类型的字段，InnoDB中必须包含只有该字段的索引，但是在MyISAM表中，可以和其他字段一起建立联合索引。<br/>4.DELETE FROM table时，InnoDB不会重新建立表，而是一行一行的删除。<br/>5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的，解决方法是首先把InnoDB表改成MyISAM表，导入数据后再改成InnoDB表，但是对于使用的额外的InnoDB特性（例如外键）的表不适用。<br/><br/>另外，InnoDB表的行锁也不是绝对的，如果在执行一个SQL语句时MySQL不能确定要扫描的范围，InnoDB表同样会锁全表，例如update table set num=1 where name like “%aaa%”<br/><br/>以暂对存储引擎的认识，觉得 InnoDB 支持外键，在数据量可以用“庞大”来形容时，在有良好的 INDEX 的基础上，InnoDB 的查询速度应该比 MyISAM 要快。<br/>在 Falcon 有稳定版本前，我想 MyISAM 是一个可用的选择方案。<br/><br/>任何一种表都不是万能的，只用恰当的针对业务类型来选择合适的表类型，才能最大的发挥MySQL的性能优势。<br/><br/><br/><strong>MySQL中MyISAM引擎与InnoDB引擎性能简单测试</strong><br/><br/><br/>[硬件配置]<br/>CPU : AMD2500+ (1.8G)<br/>内存: 1G/现代<br/>硬盘: 80G/IDE<br/><br/>[软件配置]<br/>OS : Windows XP SP2<br/>SE : PHP5.2.1<br/>DB : MySQL5.0.37<br/>Web: IIS6<br/><br/>[MySQL表结构]<br/><br/><br/><div class="code">CREATE TABLE `myisam` (<br/>&nbsp;&nbsp; `id` int(11) NOT NULL auto_increment,<br/>&nbsp;&nbsp; `name` varchar(100) default NULL,<br/>&nbsp;&nbsp; `content` text,<br/>&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp; (`id`)<br/>) ENGINE=MyISAM DEFAULT CHARSET=gbk;<br/><br/>CREATE TABLE `innodb` (<br/>&nbsp;&nbsp; `id` int(11) NOT NULL auto_increment,<br/>&nbsp;&nbsp; `name` varchar(100) default NULL,<br/>&nbsp;&nbsp; `content` text,<br/>&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp; (`id`)<br/>) ENGINE=InnoDB DEFAULT CHARSET=gbk;</div><br/><br/>[数据内容]<br/><br/>$name = "heiyeluren";<br/>$content = "MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎：· MyISAM管理非事务表。它提供高速存储和检索，以及全文搜索能力。MyISAM在所有MySQL配置里被支持，它是默认的存储引擎，除非你配置MySQL默认使用另外一个引擎。 ·MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样，MEMORY和MERGE存储引擎处理非事务表，这两个引擎也都被默认包含在MySQL中。 释：MEMORY存储引擎正式地被确定为HEAP引擎。· InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所有MySQL 5.1二进制分发版里，你可以按照喜好通过配置MySQL来允许或禁止任一引擎。·EXAMPLE存储引擎是一个“存根”引擎，它不做什么。你可以用这个引擎创建表，但没有数据被存储于其中或从其中检索。这个引擎的目的是服务，在MySQL源代码中的一个例子，它演示说明如何开始编写新存储引擎。同样，它的主要兴趣是对开发者。";<br/><br/><br/>[插入数据-1] (innodb_flush_log_at_trx_commit=1)<br/>MyISAM 1W：3/s<br/>InnoDB 1W：219/s<br/><br/>MyISAM 10W：29/s<br/>InnoDB 10W：2092/s<br/><br/>MyISAM 100W：287/s<br/>InnoDB 100W：没敢测试<br/><br/>[插入数据-2] (innodb_flush_log_at_trx_commit=0)<br/>MyISAM 1W：3/s<br/>InnoDB 1W：3/s<br/><br/>MyISAM 10W：30/s<br/>InnoDB 10W：29/s<br/><br/>MyISAM 100W：273/s<br/>InnoDB 100W：423/s<br/><br/>[插入数据3] (innodb_buffer_pool_size=1024M)<br/>InnoDB 1W：3/s<br/>InnoDB 10W：33/s<br/>InnoDB 100W：607/s<br/><br/>[插入数据4] (innodb_buffer_pool_size=256M, innodb_flush_log_at_trx_commit=1, set autocommit=0)<br/><br/>InnoDB 1W：3/s<br/>InnoDB 10W：26/s<br/>InnoDB 100W：379/s<br/><br/><br/><br/>[MySQL 配置文件] (缺省配置)<br/><br/><br/><div class="code"># MySQL Server Instance Configuration File<br/>&#91;client&#93;<br/>port=3306<br/><br/>&#91;mysql&#93;<br/>default-character-set=gbk<br/><br/>&#91;mysqld&#93;<br/>port=3306<br/>basedir=&quot;C:/mysql50/&quot;<br/>datadir=&quot;C:/mysql50/Data/&quot;<br/>default-character-set=gbk<br/>default-storage-engine=INNODB<br/>sql-mode=&quot;STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&quot;<br/>max_connections=100<br/><br/>query_cache_size=0<br/>table_cache=256<br/>tmp_table_size=50M<br/>thread_cache_size=8<br/>myisam_max_sort_file_size=100G<br/>myisam_max_extra_sort_file_size=100G<br/>myisam_sort_buffer_size=100M<br/>key_buffer_size=82M<br/>read_buffer_size=64K<br/>read_rnd_buffer_size=256K<br/>sort_buffer_size=256K<br/><br/>innodb_additional_mem_pool_size=4M<br/>innodb_flush_log_at_trx_commit=1<br/>innodb_log_buffer_size=2M<br/>innodb_buffer_pool_size=159M<br/>innodb_log_file_size=80M<br/>innodb_thread_concurrency=8</div><br/><br/>【总结】<br/><br/>可以看出在MySQL 5.0里面，MyISAM和InnoDB存储引擎性能差别并不是很大，针对InnoDB来说，影响性能的主要是 innodb_flush_log_at_trx_commit 这个选项，如果设置为1的话，那么每次插入数据的时候都会自动提交，导致性能急剧下降，应该是跟刷新日志有关系，设置为0效率能够看到明显提升，当然，同样你可以SQL中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。另外，还听说通过设置innodb_buffer_pool_size能够提升InnoDB的性能，但是我测试发现没有特别明显的提升。<br/><br/>基本上我们可以考虑使用InnoDB来替代我们的MyISAM引擎了，因为InnoDB自身很多良好的特点，比如事务支持、存储过程、视图、行级锁定等等，在并发很多的情况下，相信InnoDB的表现肯定要比MyISAM强很多，当然，相应的在my.cnf中的配置也是比较关键的，良好的配置，能够有效的加速你的应用。<br/><br/>如果不是很复杂的Web应用，非关键应用，还是可以继续考虑MyISAM的，这个具体情况可以自己斟酌。
]]>
</description>
</item><item>
<link>https://iam.ittot.com/read.php/.htm#blogcomment</link>
<title><![CDATA[[评论] InnoDB和MyISAM]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://iam.ittot.com/read.php/.htm#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>