表类型(存储引擎)的选择

表类型(存储引擎)的选择

插件式存储引擎是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表进行的。

posted on 2015-01-21 09:58  我是齐欢  阅读(206)  评论(0编辑  收藏  举报