数据库存储引擎是数据库底层软件组织,数据库管理系统(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 |