引擎种类
- MYISAM
- INNODB
- XtraDB
- MEMORY
- BDB
- NDB
- MERGE
- EXAMPLE
- ARCHIVE
- CSV
- BLACKHOLE
- FEDERATED
较新的引擎
- TokuDB
- ScaleDB
- InfiniDB
- Infobright
引擎特征比较
INNODB
简介
这是MySQL 5.5或更高版本的默认存储引擎。它提供了事务安全(ACID兼容)表,支持外键引用完整性约束。
它支持提交、回滚和紧急恢复功能来保护数据。它还支持行级锁定。当在多用户环境中使用时,它的“一致非锁
定读取”提高了性能。它将数据存储在集群索引中,从而减少了基于主键的查询的I/O。
优点:
- 支持事务安全(数据安全与恢复机制)
- 支持B+tree索引,基于BTree的高效聚集簇索引
- 支持数据缓存,
- 支持外键
- 强大的维护团队 google oracle facebok 等
缺点:
- 索引空间的占用
- 非主键索引造成的二次回表查询
- 条件查询时,覆盖索引命中条件较复杂
- 索引碎片问题
- 事务支持带来的表死锁问题
- 事务(读写)控制机制,造成性能的损失
- 查询数据相对较快,不适合大量的select
MyISAM
简介
该存储引擎管理非事务性表,提供高速存储和检索,支持全文搜索。
优点:
- 支持全文索引,查询数据相对较快,适合大量的select
- 支持基于B+Tree树索引结构的非聚集簇索引
- 非事务场景MYISAM的性能更优,占用的存储空间少
- 索引压缩,能够较好支持更大数据量的索引存储
缺点:
- 不支持事务、不具备AICD特性(原子性、一致性、分离性、永久性);
- 表级别锁定形式(更新数据时锁定整个表、这样虽然可以让锁定的实现成本很小但是同时大大降低了其并发的性能);
- 非聚集索引,数据与索引分开存储
- 只缓存索引,不缓存数据
- 不支持外键约束、只支持全文检索;
innodb与MyISAM 其它对比:
存储结构:
- MyISAM在磁盘上存储成三个文件, .frm文件存储表定义,数据文件的扩展名为.MYD (MYData), 索引文件的扩展名是.MYI (MYIndex)
- innodb 在磁盘上存储成五个文件,.frm文件存储表定义,ibdata1共享表空间文件,表名.ibd私有表空间文件,用于支持事务的持久性的ib_logfile0 与 ib_logfile1
对AUTO_INCREMENT的操作:
count 统计:MyISAM 记录行数
MEMORY
简介
提供内存中的表,以前称为堆。它在RAM中处理所有数据,以便比在磁盘上存储数据更快地访问。用于快速查找引用和其他相同的数据。
支持全文索引 树索引 hash索引
使用Memory表(heap表),数据都保存在内存中,不需要磁盘IO,memory表结构重启后会保存但是会出现数据丢失
使用场景:
用于查找或映射表(邮编洲名),不知道与redis的区别优劣
用于缓存周期性聚合数据,(可以作为账务处理中 临时数据或较长时间数据的存储)
用于保存数据分析中的中间数据
Memory使用的是表级锁,并发性能低,不支持blob text类型
Varchar类型会转换成定长的Char
MERGE(废弃)
将多个类似的MyISAM表分组为一个表,可以处理非事务性表,默认情况下包括这些表。
MERGE是MyISAM表合并过来的虚表,
EXAMPLE
你可以使用此引擎创建表,但不能存储或获取数据。这样做的目的是教开发人员如何编写新的存储引擎。
ARCHIVE
用于存储大量数据,不支持索引。(适合日志与数据采集存储)
会对插入的行进行zlib数据压缩,不支持索引需要全表扫描,压缩存储更少的磁盘IO
CSV
在文本文件中以逗号分隔值格式存储数据。CSV文件作为mysql 数据库的表,外部系统也可以直接读取文件表
可以作为数据交换
BLACKHOLE
受要存储的数据,但始终返回空。但是会记录日志,可以用于复制数据库到备份库
FEDERATED/FEDERATEDX
将数据存储在远程数据库中。可作为远程数据库服务的代理端
NDB
集群引擎
分布式 灾备 高可用 NDB数据库组合(mysql cluster)
还有很多第三方类的引擎
转换表引擎 alter table tablename engine=INNODB