3.存储引擎简介
Mysql数据库的核心在于存储引擎,由于Mysql的开源特性,用户可以根据预定义的存储引擎接口编写自己的存储引擎,Mysql官方手册第16章给出了编写自定义存储引擎的过程。
存储引擎可以分为官方和第三方存储引擎。比如大名鼎鼎的InnoDB存储引擎最早就是第三方存储引擎,后被Oracle收购。
3.1 InnoDB
支持事务,面向在线事务处理(OLTP)的应用。从Mysql 5.5.8开始,为默认存储引擎。
特点:行锁设计、支持外键、并支持类似于Oracle的非锁定读,即读操作不会产生锁。
-
InnoDB将数据放在一个逻辑的表空间中,可以将每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中。
-
通过多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4中隔离级别,默认为REPEATABLE,
同时使用next-key locking的策略来避免幻读(phantom)。
-
除此之外,还提供了插入缓冲、二次写、自适应哈希索引、预读等高可用功能。
3.2 MyISAM
不支持事务、表锁设计,支持全文索引,主要面向一些OLAP数据库应用。
- MyISAM存储引擎另一个与众不同的地方在于:它的缓冲池只缓存索引文件,而不缓存数据文件。
- MyISAM存储引擎由MYD和MYI组成,一个存放数据文件,一个存放索引文件。
- 从5.0版本开始,MyISAM默认支持 256TB 的单表数据。
3.3 NDB
集群存储引擎,share-nothing集群架构,因此能提供更高的可用性。NDB的特点是数据全部放在内存中(从5.1版本开始,可以将非索引数据放在磁盘上),因此主键查找速度极快,并且通过添加NDB数据存储节点可以线性地提高数据库性能,是高可用高性能的集群系统。
缺点:NDB的JOIN是在Mysql数据库层完成的,而不是在存储引擎层完成。因此复杂JOIN操作需要巨大的网络开销,查询速度很慢。
3.4 Memory
将表中的数据存放在内存中,数据库重启或崩溃,数据会丢失。它非常适合于存储临时数据的临时表,以及数据仓库中的维度表。Memory默认使用hash索引。
虽然很快,但是使用有限制。比如只支持表锁,并发性能较差,并且不支持text和blob列类型。最重要的是变长字段是按照char方式,因此会浪费内存。
有一点容易被忽视:Mysql数据库使用了Memory作为临时表存放查询的中间结果集
,如果中间结果集大于Memory的容量设置,又或者中间结果集含有text或blob的字段,则Mysql
会转到MyISAM
存放到磁盘中。MyISAM
不缓存数据文件,所以对于产生的临时表的查询性能有所损失。
3.5 Archive
只支持insert和select操作,从5.1版本开始支持索引,其设计目标是提供高效的插入和压缩功能。
使用行锁设计实现高并发的插入操作,但其本身不是事务安全的存储引擎。
使用zlib算法将数据行进行压缩后存储,压缩比一般可达1:10。
非常适合存储归档文件,如日志信息。
3.6 Federated
不存放数据,它只是指向一台远程Mysql数据库服务器上的表。只支持Mysql数据库表。
3.7 Maria
设计目标主要是用来取代原有的MyISAM称为默认存储引擎。
特点:支持缓存数据和索引文件,行锁设计,提供了MVCC功能,支持事务和非事务安全的选项,以及更好的BLOB类型的处理性能。
3.8 其他存储引擎
其他引擎:Merge、CSV、Sphinx、Infobright
3.9 各存储引擎的比较
3.10 Mysql实例数据库下载
附录
OLTP:(Online Transaction Processing 在线事务处理)
MVCC:(多版本并发控制)
OLAP:(Online Analytical Processing 在线分析处理)
ETL:(Extract、Transform、Load 抽取转换加载)
Feature | MyISAM | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|
B-tree indexes | Yes | Yes | Yes | No | No |
Backup/point-in-time recovery (note 1) | Yes | Yes | Yes | Yes | Yes |
Cluster database support | No | No | No | No | Yes |
Clustered indexes | No | No | Yes | No | No |
Compressed data | Yes (note 2) | No | Yes | Yes | No |
Data caches | No | N/A | Yes | No | Yes |
Encrypted data | Yes (note 3) | Yes (note 3) | Yes (note 4) | Yes (note 3) | Yes (note 3) |
Foreign key support | No | No | Yes | No | Yes (note 5) |
Full-text search indexes | Yes | No | Yes (note 6) | No | No |
Geospatial data type support | Yes | No | Yes | Yes | Yes |
Geospatial indexing support | Yes | No | Yes (note 7) | No | No |
Hash indexes | No | Yes | No (note 8) | No | Yes |
Index caches | Yes | N/A | Yes | No | Yes |
Locking granularity | Table | Table | Row | Row | Row |
MVCC | No | No | Yes | No | No |
Replication support (note 1) | Yes | Limited (note 9) | Yes | Yes | Yes |
Storage limits | 256TB | RAM | 64TB | None | 384EB |
T-tree indexes | No | No | No | No | Yes |
Transactions | No | No | Yes | No | Yes |
Update statistics for data dictionary | Yes | Yes | Yes | Yes | Yes |