引言
MySQL是一种流行的关系型数据库管理系统(RDBMS),它支持多种不同的数据库引擎。数据库引擎是用于存储、管理和检索数据的核心组件,它们直接影响着数据库的性能、可靠性和功能,接下来本文介绍下一些常见的MySQL数据库引擎。
存储引擎
InnoDB引擎
InnoDB 是MySQL默认的事务性数据库引擎,底层存储结构为B+树, B树的每个节点对应innodb的一个page, page大小是固定的,一般设为 16k。其中非叶子节点只有键值,叶子节点包含完成数据。
适用场景:
- 经常更新的表,适合处理多重并发的更新请求。
- 支持事务。
- 可以从灾难中恢复(通过 bin-log 日志等)。
- 外键约束。只有他支持外键。
- 支持自动增加列属性 auto_increment。
MyISAM引擎
MyIASM 没有提供对数据库事务的支持,也不支持行级锁和外键,
因此当 INSERT(插入)或 UPDATE(更新)数据时即写操作需要锁定整个表,效率会低一些。
MyIASM 执行读取操作的速度很快,而且不占用大量的内存和存储资源。在设计之初就预想数据组织成有固定长度的记录,按顺序存储的。
适用场景:
- 不支持事务。
- 它对于读密集型应用程序具有较好的性能。
它适用于只读或很少更新的应用程序,例如博客、新闻网站等。
Memory引擎
Memory(也叫 HEAP)堆内存:使用存在内存中的内容来创建表,每个 MEMORY 表实际对应一个磁盘文件。 MEMORY 类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用 HASH 索引。但是一旦服务关闭,表中的数据就会丢失掉。 Memory 同时支持散列索引和 B 树索引, B树索引可以使用部分查询和通配查询,也可以使用<,>和>=等操作符方便数据挖掘,散列索引相等的比较快但是对于范围的比较慢很多。
特点:
- Memory引擎将表存储在内存中,提供了非常高的读写性能。
- Memory引擎不支持事务,并且在数据库重启时会丢失数据。
它适用于需要快速读写操作的临时数据或缓存。
TokuDB
TokuDB 底层存储结构为 Fractal Tree,Fractal Tree 的结构与 B+树有些类似, 在 Fractal Tree
中, 每一个 child 指针除了需要指向一个 child 节点外,还会带有一个 Message Buffer ,这个Message Buffer 是一个 FIFO 的队列,用来缓存更新操作。
例如,一次插入操作只需要落在某节点的 Message Buffer 就可以马上返回了,并不需要搜索到叶
子节点。这些缓存的更新会在查询时或后台异步合并应用到对应的节点中。
TokuDB 在线添加索引,不影响读写操作, 非常快的写入性能, Fractal-tree 在事务实现上有优势。他主要适用于访问频率不高的数据或历史数据归档。
Archive引擎
- Archive引擎专门用于存储和归档大量历史数据。
- 它采用高度压缩的存储格式,在存储空间和性能之间取得了平衡。
Archive引擎适用于只需偶尔查询的大型历史数据集。
引擎的选择
功能 MyISAM Memory InnoDB Archive 存储限制 265TB RAM 65TB Node 支持事务 No No Yes No 支持全文索引 Yes No No No 支持数索引 Yes Yes Yes No 支持哈希索引 No Yes No No 支持数据缓存 No N/A Yes No 支持外键 No No Yes No
结论
除了上述几个引擎,MySQL还支持其他一些引擎,如CSV引擎、Blackhole引擎等。每个引擎都有其适用的场景和优化策略,根据项目需求评估选择合适的引擎。
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。