Mysql 存储引擎
InnoDB 存储引擎
--简概
InnoDB面向OLTP应用,其特点是行锁涉及、支持外键并支持类似于ORACLE的非锁定读,即默认读取不产生锁
InnoDB 存储引擎数据存放于逻辑的表空间,由存储引擎自身进行管理,4.1版本后,可将每个InnoDB存储引擎表单独存放于一个独立的ibd文件(支持裸设备 row disk 建立表空间)
--支持
高可用: 多版本并发控制(NVCC)
默认隔离机制: 可重复读(REPEATABLE)
避免幻读机制: next-key locking策略
高性能:
插入缓冲(insert buffer)、
二次写(double write)、
自适应哈希索引(adaptive hash index)、
预读(read ahead)
--数据存储
存储方式: 聚集(clustered)
存储顺序: 按主键顺序存放(若未设置主键,则存储引擎自动为每行生成6字节的ROWID,并作为主键)
MyISAM 存储引擎
--简概
MyISAM面向OLAP应用,其特点是不支持事务、表锁设计、支持全文索引
最大特点: MyISAM存储引擎缓冲池只缓存(cache)索引数据、而不缓冲数据文件
(MyISAM存储引擎只缓存索引文件,数据文件的缓存交由操作系统本身缓存)
(5.1.23版本无论32位或64位操作系统,缓存索引的缓冲区最大只能设置4GB,而后版本,64位操作系统可支持大于4GB的索引缓冲区)
--数据存储
存储引擎组成: MYD与MYI两部分组成,MYD存储数据文件而MYI存储索引文件
数据压缩算法: 赫夫曼编码静态算法(myisampack工具压缩与解压)
--支持
存储引擎表容量: 5.0版本之前,存储引擎表默认4G,超过4G需指定 MAX_ROW 和 AVG_ROW_LENGTH 属性
5.0版本之后,单表默认支持256T数据
NDB 存储引擎
--简概
NDB存储引擎是一个集群存储引擎,类似于ORACLE RAC集群,但其两者架构不一样:
ORACLE RAC:SHAR DISK
Mysql NDB: SHARE Nothing
特点: NDB存储引擎将数据全部存放于内存中(5.1版本后支持把非索引数据存放于磁盘),再通过主键查找(primary key lookup)速度极快,再添加NDB数据存储节点(Data Node)可线性提高数据库性能,是高可用、高性能系统
缺点: NDB存储引擎的表连接操作(Join)是在数据库层的,而非存储引擎内存区,这意味着复杂连接操作SQL需要耗费巨大网络开销,导致查询速度变慢
Memory 存储引擎
--简概
特点:
1、只支持表锁,并发性能较差,并且不支持TEXT和BLOB列类型,另外,存储变长字段varchar时是按照定常字段char方式存储,极大浪费内存(eBay工程已给出patch解决方案)
2、默认使用哈希索引,而非B树
优点: Memory存储引擎(HEAP存储引擎)将表数据都存放于内存中,故该存储引擎速度灰常快
缺点:
1、数据库重启或异常宕机,存储引擎表中所有数据丢失
2、使用Memory存储引擎作为临时表存放中间结果,若中间结果集超过存储引擎表容量设置,或者表数据库含有TEXT或者BLOB字段类型数据,MYSQL数据库会将其表转换为MyIASM存储引擎表存放于磁盘,但MyISAMc存储引擎表不缓存数据文件,所以产生的临时表,对数据库查询性能有所影响
应用场景:
1、用于存放临时数据的临时表
2、数据仓库中的纬度表
Archive 存储引擎
--简概
特点:
1、只支持INSERT以及SELECT操作(5.1版本后支持全文索引)
2、使用Zlib算法压缩数据存储,压缩比1:10
3、使用行锁实现高并发插入操作
应用场景:存储归档数据,如g归档日志等其他日志信息
设计目标:提供高速插入以及压缩的功能
Federated 存储引擎
--简概
特点:
1、不存放数据,单纯指向远程MYSQL服务器中数据库上的表
2、类似于SQL SERVER链接服务器功能以及ORACLE的透明网关
缺点:
只支持MYSQL数据库,不支持异构数据库
Maria 存储引擎
--简概
特点:
1、可看作MyIASM存储引擎后续版本
2、支持缓存数据文件以及索引文件
3、支持行锁设定,提供MVCC功能
4、支持事务和非事务的安全选项
5、拥有更好处理BLOB字段类型数据的性能改善
## 各个存储引擎比较各个存储引擎比较


版权声明:本文为博主原创文章,未经博主允许不得转载。



