使用存储引擎的优点:每个存储引擎都有各自的特点,可以根据具体应用建立不同存储引擎表
各种存储引擎的区别
InnoDB存储引擎
InnoDB存储尹支持事务
设计目标:面向在线事务处理(OLTP)的应用
InnoDB通过多版本并发控制(MVCC)获得高并发性,实现了SQL标准的4中隔离级别,默认为REPEATABLE级别
使用next-key locking的策略避免幻读
提供的高性能高可用的功能:插入缓存、二次写、自适应哈希索引、预读等
InnoDB采用聚集的方式,每张表的存储都是按主键的顺序进行存放,如果没有显示的在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此为主键
MyISAM存储引擎
MyISAM存储引擎不支持事务、表锁设计,支持全文索引
面向目标:OLAP数据库应用
MyISAM是MySQL5.5.8版本之前默认的存储引擎(不包括windows版本)
MyISAM组成:MYD和MYI
MYD:用来存放数据文件
MYI:用来存放索引文件
MySQL5.0版本之前,MyISAM默认支持表大小为4GB,如果要大于4GB需要制定MAX_ROWS和AVG_ROW_LENGTH属性,从MySQL5.0版本开始MyISAM默认支持256TB的单表数据
NDB存储引擎
NDB存储引擎是一个集群存储引擎,结构是share nothing的集群架构,能提供更高的可用性
数据库架构设计三种模式:share nothing,share everythong,share disk
参考链接:https://www.cnblogs.com/kzwrcom/p/6397709.html
Shared Everthting:针对单个主机,完全透明共享CPU/MEMORY/IO,并行能力最差,代表:SQL Server
Shared Disk:各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。典型的代表Oracle Rac, 它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能 。
Shared nothing架构(shared nothing architecture)是一 种分布式计算架构。这种架构中的每一个节点( node)都是独立、自给的,而且整个系统中没有单点竞争。
share nothing架构原理:https://www.jianshu.com/p/403df7516bdc
NDB的缺点:
NDB存储引擎的链接操作(JOIN)是在MySQL数据库层完成的,而不是在存储引擎层完成的,意味着复杂连接操作需要巨大的网络开销,因此查询速度很慢
Memory存储引擎
Memory存储引擎将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据将丢失
适合用于存储临时数据的临时表以及数据仓库中的纬度表。
Memory默认使用Hash索引
优点:因为数据都存放在内存中,所以速度快
缺点:只支持表锁,并发性能差,不支持TEXT和BLOB类型
存储变长字段(varchar)是按照定长字段(char)的方式进行的,会浪费内存
Archive存储引擎
设计目标:提供高速的插入和压缩功能
Archive存储引擎只支持INSERT操作和SELECT操作,从MySQL5.1开始支持索引、
Archive存储引擎使用zlib算法将数据库进行压缩后存储,压缩比可达1:10
Archive存储引擎适合存储归档数据,如日志信息
Archive存储引擎使用行锁实现高并发的插入操作,但本身并不是事务安全的存储引擎
Federated存储引擎
Federated存储引擎表并不存放数据,它是指向一台远程MySQL数据库服务器上的表,当前只支持MySQL数据库表。
Maria存储引擎
设计目标:取代原有的MyISAM存储引擎,从而成为MySQL的默认存储引擎,可以看做是MyISAM的后续版本
特点:支持缓存数据和索引文件,应用了行锁设计,提供MVCC功能,支持事务和非事务安全的选项,及更好的BLOB字符类型处理性能
关于存储引擎的几个问题