MySQL存储引擎

MySQL的存储引擎种类很多,有MyISAM、InnoDB、Archive、Blackhole、CSV、Memory、Merge、NDB等。以下主要介绍MyISAM和InnoDB。
MyISAM
在MySQL 5.1之前的版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、不支持外键、不支持行级锁(仅支持表级锁)。特点是访问速度快,对事务完整性没有要求。以select、insert为主的应用基本上都可以用这个引擎来创建表。MyISAM类型的表可能会损坏,原因可能多种多样。可以通过check table语句检查MyISAM表的健康,并用repair table语句修复一个损坏的MyISAM表。
MyISAM表磁盘上存储成3个文件,其中文件名和表名一致,但扩展名分别是:
.frm(存储表定义)
.MYD(MyData,存储数据)
.MYI(MyIndex,存储索引)
MyISAM特性是:
1.加锁与并发:对整张表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁。但是在表有读取查询的同时,也可以往表中插入新的记录(这被称为并发插入);
2.为保证效率,不支持事务处理;
3.count(*)时效率高,不用遍历全表,原因是该引擎会记录行数;
4.非聚簇索引,支持全文索引,索引数据和表数据分开存储;
InnoDB
支持事务,具有提交、回滚和崩溃恢复能力。默认行级锁,是基于聚簇索引建立的。聚簇索引对主键查询有很高的性能。不过它的二级索引中必须包含主键列,所以如果主键很大的话,其他索引都会很大。存储格式是平台独立的,可以将数据和索引文件复制到其他平台。
InnoDB存储方式:
1.使用共享表空间存储,这种创建的表,表结构数据保存在.frm文件中,数据和索引数据保存在innodb_data_home_dir和innodb_data_file_path定义的表中间,可以是多个文件;
2.使用多表空间存储,这种方式创建的表,表结构数据仍然存在.frm文件中,但是每个表的数据和索引单独保存在.ibd中,如果是个分区表,则每个分区对应单独的.ibd中,文件名是“表名+分区名”,可以在创建分区的时候指定每个分区的数据文件位置,以此来将表的IO均匀分布在多个磁盘中;
InnoDB特性是:
1.事务安全;
2.行级锁,为承受高并发增加了竞争力;
3.count(*)时效率低,遍历表计算数量;
4.聚簇索引,主键默认为聚簇索引,没有主键时以第一列为聚簇索引,普通索引指向聚簇索引;
5.支持主键、外键。

你可能感兴趣的:(MySQL存储引擎)