﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-J度空间-文章分类-mysql</title><link>http://www.blogjava.net/jdo/category/24617.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 08 Aug 2007 16:27:35 GMT</lastBuildDate><pubDate>Wed, 08 Aug 2007 16:27:35 GMT</pubDate><ttl>60</ttl><item><title>mysql表类型MyISAM和InnoDB比较</title><link>http://www.blogjava.net/jdo/articles/134288.html</link><dc:creator>蓝色幽默</dc:creator><author>蓝色幽默</author><pubDate>Fri, 03 Aug 2007 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/jdo/articles/134288.html</guid><wfw:comment>http://www.blogjava.net/jdo/comments/134288.html</wfw:comment><comments>http://www.blogjava.net/jdo/articles/134288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jdo/comments/commentRss/134288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jdo/services/trackbacks/134288.html</trackback:ping><description><![CDATA[<p><a  href="http://www.sd9981.com/mysql/?p=8" onclick="return alinks_click(this);" title="mysql存储引擎之－MyISAM介绍" rel="external">MyISAM</a>:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有<a  href="http://www.sd9981.com/mysql/?p=35" onclick="return alinks_click(this);" title="MySQL如何使用索引" rel="external">索引</a>的
顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具.
MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚，不具有原子性。如果执行大量
的<a  href="http://www.sd9981.com/mysql/?p=24" onclick="return alinks_click(this);" title="Mysql select句法详解" rel="external">SELECT</a>，MyISAM是更好的选择。<span id="more-20"></span></p>
<p><a  href="http://www.sd9981.com/mysql/?p=9" onclick="return alinks_click(this);" title="mysql存储引擎之-InnoDB介绍" rel="external">InnoDB</a>:这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的<a  href="http://www.sd9981.com/mysql/?p=41" onclick="return alinks_click(this);" title="MYSQL insert语法" rel="external">INSERT</a>或<a  href="http://www.sd9981.com/mysql/?p=43" onclick="return alinks_click(this);" title="mysql update语法" rel="external">UPDATE</a>,出于性能方面的考虑，应该使用InnoDB表,</p>
<p>对于支持事物的InnoDB类型的标，影响速度的主要原因是AUTOCOMMIT默认设置是打开的，而且程序没有显式调用BEGIN
开始事务，导致每插入一条都自动Commit，严重影响了速度。可以在执行sql前调用begin，多条sql形成一个事物（即使autocommit打
开也可以），将大大提高性能。</p>
<p>===============================================================<br>
1. 4.0以上mysqld都支持事务，包括非max版本。3.23的需要max版本mysqld才能支持事务。</p>
<p>2. 创建表时如果不指定type则默认为myisam，不支持事务。<br>
&nbsp; 可以用 <a  href="http://www.sd9981.com/mysql/?p=159" onclick="return alinks_click(this);" title="mysql 中show 命令用法详细介绍" rel="external">show</a> create table tablename 命令看表的类型。</p>
<p>2.1 对不支持事务的表做start/commit操作没有任何效果，在执行commit前已经提交，测试：<br>
执行一个msyql：<br>
use test;<br>
drop table if exists tn;<br>
create table tn (a varchar(10)) type=myisam;<br>
drop table if exists ty;<br>
create table ty (a varchar(10)) type=innodb;</p>
<p>begin;<br>
insert into tn values('a');<br>
insert into ty values('a');<br>
select * from tn;<br>
select * from ty;<br>
都能看到一条记录</p>
<p>执行另一个mysql：<br>
use test;<br>
select * from tn;<br>
select * from ty;<br>
只有tn能看到一条记录<br>
然后在另一边<br>
commit;<br>
才都能看到记录。</p>
<p>3. 可以执行以下命令来切换非事务表到事务（数据不会丢失），innodb表比myisam表更安全：<br>
&nbsp;&nbsp; alter table tablename type=innodb;</p>
<p>3.1 innodb表不能用repair table命令和myisamchk -r table_name<br>
&nbsp;但可以用check table，以及mysqlcheck [OPTIONS] database [tables]</p>
<p>4. 启动mysql数据库的命令行中添加了以下参数可以使新发布的mysql数据表都默认为使用事务（<br>
&nbsp; 只影响到create语句。）<br>
--default-table-type=InnoDB</p>
<p>测试命令：<br>
use test;<br>
drop table if exists tn;<br>
create table tn (a varchar(10));<br>
show create table tn;</p>
<p>5. 临时改变默认表类型可以用：<br>
set table_type=InnoDB;<br>
show variables like 'table_type';<br>
或：<br>
c:\mysql\bin\mysqld-max-nt --standalone --default-table-type=InnoDB</p><img src ="http://www.blogjava.net/jdo/aggbug/134288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jdo/" target="_blank">蓝色幽默</a> 2007-08-03 17:32 <a href="http://www.blogjava.net/jdo/articles/134288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>