表类型(存储引擎)的选择
表类型(存储引擎)的选择
插件式存储引擎是MySQL数据库最重要的特性之一,用户可以依据应用的需要选择如何存储和索引数据、是否使用事务等。
MySQL5.0支持的存储引擎包括MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎提供非事务安全表。
默认情况下,创建新表不指定表的存储引擎,则新表是默认存储引擎,如果需要修改,设置default-table-type。
eg: create table ai(
i bigint(20) not null auto_increatement,
primary key(i)
)ENGINE=MyISAM DEFAULT CHARSET=gbk;
Alter table ai engine=innodb;
MyISAM
MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键。优势是访问速度快,对事物完整性没有要求或者以select、insert为主的应用基本上都可以使用此引擎创建表。每个MyISAM在磁盘上存储成3个文件,其文件名都和表名相同,扩展分别为:
.frm(存储表定义)
MYD(MYData,存储数据)
MYI(MYIndex,存储索引)
加锁:对整张表进行加锁,而不是行。
并发:在读数据的时候,所有的表上都可以获得共享锁(读锁),每个连接都不互相干扰。在写数据的时候,获得排他锁,会把整个表进行加锁,而其他的连接请求(读,写请求)都处于等待中。
InnoDB
InnoDB存储引擎提供了具有提交、回滚、和崩溃回复能力的事务安全。跟MyISAM比,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
自动增长列必须索引。
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,字表在创建外键的时候会自动创建对应的索引。
InnoDB存储表和索引有两种方式:1、使用共享表空间存储;2、使用多表空间存储
MEMORY
MEMORY存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件,格式是.frm。访问速度快(因为数据在内存中,默认使用hash索引,但是一旦服务关闭,表中数据就会丢失)
MERGE
MERGE存储引擎是一组MyISAM的组合,这些MyISAM表必须结构完全相同,MERGE表本身没有数据,对MERGE类型的表进行查询、更新、删除等操作实际上是对内部的MyISAM表进行的。