MySQL支持MyISAM,InnoDB,HEAP,BOB,ARCHIVE,CSV等多种数据表类型,在创建一个新MySQL数据表时,可以为它设置一个类型,其中最重要的有MyISAM,InnoDB两种表

类型,它们各有自己的特性.如果在创建一个数据表时没有设置其类型,MySQL服务器将会根据它的具体配置情况在MyISAM和InnoDB两个类型之间选择.默认的数据表类型,由

MySQL配置文件里的default-table-type选项指定,当用CREATE TABLE命令创建一个新数据表时,可以通过ENGINE或TYPE选项决定数据表类型.

MyISAM数据表

        MyISAM数据表类型的特点是成熟,稳定和易于管理.它使用一种表格锁定的机制,来优化多个并发的读/写操作.其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新

机制所浪费的空间.MyISAM还有一些有用的扩展,例如,用来修复数据库文件的MyISAMChk工具和用来恢复浪费的空间的MyISAMPACK工具.MyISAM强调了快速读取操作,这可能

就是为什么MySQL受到Web开发人员如此青睐的主要原因.在Web开发中你所进行的大量数据操作都是读取操作,所以,大多数虚拟主机提供商和Internet平台提供商只允许使用

MyISAM格式.虽然MyISAM表类型是一种比较成熟稳定的表类型,但是MyISAM对一些功能不支持.

InnoDB数据表

可以把InnoDB看做是MyISAM的一种更新换代产品.InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全存储引擎.InnoDB也支持外键(FOREIGN KEY)机制.在

SQL查询中,你可以自由的将InnoDB类型的表与其他MySQL的表的类型混合起来,甚至在同一个查询中也可以混合.InnoDB数据表也有缺点,否则用户肯定只使用它而不去使用

MyISAM数据表类型.例如,InnoDB数据表的空间占用量要比同样内容的MyISAM数据表大很多,另外,这种表类型也不支持全文索引等.

如何选择:

MyISAM数据表和InnoDB数据表可以同时存在于同一个数据库里,也就是可以把数据库里的不同数据表设置为不同类型.这样,用户就可以根据每一个数据表的内容数据和具

体用途分别为它们选择最佳的数据表类型.下面是两个表的简单对比:

表类型功能对比

MyISAM表

InnoDB表

事务处理

不支持

支持

数据行锁定

不支持,只有表锁定

支持

外键约束

不支持

支持

表空间大小

相对小

相对大,最大是2倍

全文索引

支持

不支持

COUNT问题


执行COUNT(*)查询时,速度慢

如果希望以最节约空间和时间或者响应速度快的方式来管理数据表,MyISAM数据表就应该是首选.如果应用程序需要用到事务,使用外键或需要更高的安全性,以及需要允许

很多用户同时修改某个数据表里的数据,则InnoDB数据表更值得考虑.当你需要创建一个新表时,可以通过添加一个ENGINE或TYPE选项到CREATE TABLE语句来告诉MySQL你

要创建什么类型的表:

CREATE TABLE t(i INT) ENGINE=INNODB;


CREATE TABLE t(i INT) TYPE=MYISAM;