数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。

MySQL服务器使用可插拔的存储引擎架构,使存储引擎可以加载和卸载到运行中的MySQL服务器。常用的存储引擎有MyISAM、InnoDB(8.0之后默认使用)等,不同的引擎提供了不同的特性。

各种存储引擎的特性

查看支持的存储引擎

环境:Mysql8.0.19
进入命令行输入:show engines查看支持的引擎信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
mysql> show engines\G
*************************** 1. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 5. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 8. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
9 rows in set (0.00 sec)
  • InnoDB :MySQL 8.0默认存储引擎。InnoDB是一个事务安全(ACID兼容)的MySQL存储引擎,支持事务。InnoDB行级锁(无需升级到粗粒度锁)和oracle风格的一致非锁读增加了多用户并发性和性能。InnoDB将用户数据存储在集群索引中,以减少基于主键的常见查询的I/O。为了保持数据完整性,InnoDB还支持FOREIGN KEY引用完整性约束。
  • MyISAM:表占用的空间很小。表级锁定限制了读/写工作负载中的性能,因此它经常用于Web和数据仓库配置中的只读或只读为主的工作负载。
  • Memory:将所有数据存储在RAM中,以便在需要快速查找非关键数据的环境中进行快速访问。该引擎以前称为堆引擎。它的用例正在减少;InnoDB和它的缓冲池内存区提供了一种通用和持久的方式来将大部分或所有数据保存在内存中,而NDBCLUSTER为巨大的分布式数据集提供了快速的键值查找。
  • CSV:它的表实际上是带有逗号分隔值的文本文件。CSV表允许您以CSV格式导入或转储数据,以与读写相同格式的脚本和应用程序交换数据。因为CSV表没有索引,所以在正常操作期间,数据通常保存在InnoDB表中,而只在导入或导出阶段使用CSV表。

如何选择存储引擎

特性/存储引擎 MyISAM Memory InnoDB Archive NDB
B-tree索引 Yes Yes Yes No No
集群数据库支持 No No No No Yes
聚集索引 No No Yes No No
压缩数据 Yes No Yes Yes No
数据缓存 No N/A Yes No Yes
数据加密 Yes Yes Yes Yes Yes
外键支持 No No Yes No Yes
全文索引 Yes No Yes(MySQL5.6之后支持) No No
地理空间数据支持 Yes No Yes Yes Yes
地理空间索引支持 Yes No Yes No No
Hash索引 No Yes No No Yes
锁的粒度 表级 表级 行级 行级 行级
MVCC No No Yes No No
存储限制 256TB RAM限制 64TB None 384EB
事务 No No Yes No Yes