【从零开始的mysql】MySQL的存储引擎对比

MySQL的存储引擎对比

        mysql的每个存储引擎都是有其各自的特点,根据具体的应用建立不同的存储引擎表,由于mysql是开源的我们可以通过修改源码来进行二次开发。

注意:存储引擎是基于表的,不是数据库

InnoDB存储引擎

1.支持事务,主要面向事务处理(OLTP)的应用
2.支持外键
3.支持行级锁,三种行锁算法(Record Lock,Gap Lock,Next-Key Lock)
4.通过多版本并发控制(MVCC)支持高并发性,4种隔离级别(未提交读,已提交度,可重复读[默认],可序列化)
5.表单独存放到独立的.ibd文件中,表中的数据存储采用聚集(clusterde)方式,每张表都是按主键顺序进行存放,如果没有在表定 义时声明主键,将会为其生成一个6字节ROWID作为主键。

MyISAM存储引擎

1.不支持事务,不支持外键,主要面向一些OLAP数据库应用
2.表锁设计
3.支持全文索引
4.表由MYD和MYI文件组成,MYD存放数据文件,MYI存放索引文件
通常用于只读或大部分读取工作,如报表等

NDB存储引擎

NDB存储引擎是一个集群存储引擎,其结构为share nothing集群架构,数据全部存放在内存中(mysql5.1后支可将非索引数据放在磁盘上),因此主键查找速度极快,并且通过添加NDB数据存储节点(Data Node)可以线性的提高数据库性能。特别适用于需要高可用的应用程序
NDB存储引擎的连接(join)操作是在mysql数据库层完成的,而不是在存储引擎层完成,所以复杂的连接操作需要巨大的网络开销,查询速度会很慢。

Memory存储引擎

Memory存储引擎将表中的数据存放在内存中,如果重启数据会消失,适合存储临时数据的临时表,默认索引使用hash索引。
Memory存储引擎虽然速度非常快,但是支持表锁,并发性能差,存储变长字段varchar时是按照定长字段char来进行的,因此会浪费内存。
如果使用Memory存储引擎作为临时表存放数据时,当数据集大于Memory存储引擎表的容量设置,或结果集中包含text或blob类型字段,mysql会把其转换为MyISAM存储引擎

Archive存储引擎

Archive存储引擎只支持insert和select操作,5.1之后支持索引,使用zlib算法将数据行压缩存储,适合存储归档数据,如日志。
使用行锁实现高并发插入操作,但本身不支持事务,主要提供高速插入和压缩功能

Maria存储引擎

Maria存储引擎是新开发的一个引擎,设计目标是为了取代MyISAM的,可以看作MyISAM的后续版本,与MyISAM不同的是,支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事务和非事务的选项,和更好的blob字符类型的处理性能

各存储引擎比较

特点 InnoDB MyISAM Memory Archive NDB
存储限制 64TB 256TB RAM 没有
事务安全 支持 - - - -
锁机制 行锁 表锁 表锁 行锁 行锁
B树索引 支持 支持 支持 - 支持
哈希索引 - - 支持 - 支持
全文索引 - 支持 - - -
集群索引 支持 - - - -
T树索引 - - - - 支持
数据缓存 支持 - 支持 - 支持
索引缓存 支持 支持 支持 - 支持
数据可压缩 - 支持 - 支持 -
空间使用 N/A 非常低
内存使用
批量插入速度 非常高
支持外键 支持 - - - -
MVCC 支持 - - - -
备份/时间点恢复 支持 支持 支持 支持 支持

你可能感兴趣的:(mysql,数据库,存储引擎,从零开始的mysql)