MySQL 的存储引擎种类不少,有MyISAM、InnoDB、Archive、Blackhole、CSV、Memory、Merge、NDB等等,如下介绍经常使用的存储引擎:缓存
1、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 表还支持3 种不一样的存储格式,分别是: 高并发
1. 静态(固定长度)表:长度固定,优势是存储很是迅速,容易缓存,出现故障时容易恢复;缺点是占用的空间一般比动态表多;性能
2. 动态表:记录长度不固定,这样存储的优势是占用的空间相对小,可是频繁的更新和删除记录会产生碎片,须要定时执行spa
optimize table 语句或myisamch-r 命令来改善性能。出现故障时恢复相对困难;设计
3. 压缩表:占用很是小的磁盘空间,由于每一个记录都是被单独压缩的,因此只有很是小的访问开支。code
MyISAM 特性是:blog
1. 加锁与并发:对整张表加锁,而不是针对行。读取时会对须要读到的全部表加共享锁,写入时则对表加排他锁。可是在表有读取
查询的同时,也能够往表中插入新的记录(这被称为并发插入,Concurrent Insert);
2. 为保证效率,不支持事务处理;
3. count(*) 时效率高,不用遍历全表,缘由是该引擎会记录行数;
4. 非聚簇索引,支持全文索引,索引数据和表数据分开存储;
2、InnoDB:
MySQL 5.5以后默认的事务型引擎修改成InnoDB。它被设计用来处理大量的短时间事务,短事务大部分状况是正常提交的,不多会被回滚。它是事务安全的,具备提交、回滚和崩溃恢复能力。InnoDB 表默认为行级锁,是基于聚簇索引创建的。聚簇索引对主键查询有很高的性能。不过它的二级索引中必须包含主键列,因此若是主键列很大的话,其余的索引都会很大。存储格式是平台独立的,能够将数据和索引文件复制到其余平台。
InnoDB 存储方式:
1. 使用共享表空间存储,这种建立的表,表结构数据保存在.frm 文件中,数据和索引数据保存在innodb_data_home_dir 和 innodb_data_file_path定义的表中间,能够是多个文件;
2. 使用多表空间存储,这种方式建立的表,表结构数据仍然存在.frm 文件中,可是每一个表的数据和索引单独保存在.ibd 中,若是是个分区表,则每一个分区对应单独的.ibd 中,文件名是“表名+分区名”,能够在建立分区的时候指定每一个分区的数据文件位置,以此来将表的IO均匀分布在多个磁盘中;
InnoDB 特性是:
1. 事务安全;
2. 行级锁,为承受高并发增长了竞争力;
3. count(*) 时效率低,遍历表一计算数量;
4. 聚簇索引,主键默认为聚簇索引,没有主键时以第一列为聚簇索引,普通索引指向聚簇索引;
5. 主持主键、外键;
3、指定引擎:
1、create table mytable (name varchar(32)) engine=InnoDB; 2、alter table mytable engine = MyISAM;