MYSQL有哪些存储引擎,各自优缺点。

欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。

一、简介

数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不多的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎

MySQL提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。MySQL5.7支持的存储引擎有:InnoDB,MyISAM,Memory,Merge,Archive,Federate,CSV,BLACKHOLE等。可以使用SHOW ENGINES语句查看系统支持的引擎类型,结果如下:

mysql> SHOW ENGINES \G
*************************** 1. row ***************************
 Engine: MyISAM
Support: YES
Comment: Default engine as of MySQL 3.23 with great performance
*************************** 2. row ***************************
 Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
*************************** 3. row ***************************
 Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
*************************** 4. row ***************************
 Engine: BerkeleyDB
Support: NO
Comment: Supports transactions and page-level locking
*************************** 5. row ***************************
 Engine: BLACKHOLE
Support: NO
Comment: /dev/null storage engine (anything you write to it disappear
*************************** 6. row ***************************
 Engine: EXAMPLE
Support: NO
Comment: Example storage engine
*************************** 7. row ***************************
 Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
*************************** 8. row ***************************
 Engine: CSV
Support: NO
Comment: CSV storage engine
*************************** 9. row ***************************
 Engine: ndbcluster
Support: NO
Comment: Clustered, fault-tolerant, memory-based tables
*************************** 10. row ***************************
 Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
*************************** 11. row ***************************
 Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
*************************** 12. row ***************************
 Engine: ISAM
Support: NO
Comment: Obsolete storage engine
12 rows in set (0.00 sec)

mysql>

二、MySQL常用存储引擎介绍

2.1、InnoDB存储引擎

InnoDB 是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL5.5.5之后,InnoDB 作为默认的存储引擎,InnoDB 主要特性有:

  • 支持事务
  • 灾难恢复性好
  • 为处理巨大数据量的最大性能设计
  • 实现了缓冲管理,不仅能缓冲索引也能缓冲数据,并且会自动创建散列索引以加快数据的获取
  • 支持外键完整性约束。存储表中的数据时,每张表的存储都按逐渐顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6B的ROWID,并以此作为主键。
  • 被用在众多需要高性能的大型数据库站点上

2.2、MyISAM存储引擎

MyISAM 基于 ISAM 的存储引擎,并对其进行扩展。它是在Web、数据存储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务。在 MySQL5.5.5 之前的版本中,MyISAM 是默认的存储引擎。MyISAM 主要特性有:

  • 不支持事务
  • 使用表级锁,并发性差
  • 主机宕机后,MyISAM表易损坏,灾难恢复性不佳
  • 可以配合锁,实现操作系统下的复制备份、迁移
  • 只缓存索引,数据的缓存是利用操作系统缓冲区来实现的。可能引发过多的系统调用且效率不佳
  • 数据紧凑存储,因此可获得更小的索引和更快的全表扫描性能
  • 可以把数据文件和索引文件放在不同目录

使用 MyISAM 引擎创建数据库,将产生3个文件。文件的名字以表的名字开始,扩展名指出文件类型:frm 文件存储表定义,数据文件的扩展名为 .MYD(MYData),索引文件的扩展名是 .MYI(MYIndex)。

2.3、MEMORY存储引擎

MEMORY 存储引擎将表中的数据存储在内存中,为查询和引用其他表数据提供快速访问。MEMORY 主要特性有:

  • 使用表级锁,虽然内存访问快,但如果频繁的读写,表级锁会成为瓶颈
  • 只支持固定大小的行。Varchar类型的字段会存储为固定长度的Char类型,浪费空间
  • 不支持TEXT、BLOB字段。当有些查询需要使用到临时表(使用的也是MEMORY存储引擎)时,如果表中有TEXT、BLOB字段,那么会转换为基于磁盘的MyISAM表,严重降低性能
  • 由于内存资源成本昂贵,一般不建议设置过大的内存表,如果内存表满了,可通过清除数据或调整内存表参数来避免报错
  • 服务器重启后数据会丢失,复制维护时需要小心

三、存储引擎的选择

不同存储引擎都有各自的特点,以适应不同的需求,如下表所示,为了做出选择,首先需要考虑每一个存储引擎提供了哪些不同的功能。

功能InnoDBMyISAMMemory
存储限制64TB256TBRAM
支持事务YesNoNo
支持全文索引NoYesNo
支持树索引YesYesYes
支持哈希索引NoNoYes
支持数据缓存YesNoN/A
支持外键YesNoNo

1、如果要提供提交、回滚和崩溃恢复能力的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB 是个很好的选择。
2、如果数据表主要用来插入和查询记录,则 MyISAM 引擎能提供较高的处理效率。
3、如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以将数据保存在内存中的 Memory 引擎。MySQL 中使用该引擎作为临时表,存放查询的中间结果。
4、如果只有 INSERT 和 SELECT 操作,可以选择 Archive 引擎,Archive 存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive 引擎非常适合存储归档数据,如记录日志信息可以使用 Archive 引擎。

使用哪一种引擎要根据需要灵活选择,一个数据库中多个表可以使用不同引擎满足各种性能和实际需求。使用合适的存储引擎,将会提高整个数据库的性能。

  • 11
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
MySQL: 优点: 1. 开源,免费使用,社区活跃,有大量的用户和开发者支持。 2. 高性能,支持多种存储引擎,可以根据不同的应用场景选择不同的引擎。 3. 支持分布式部署,可以通过主从复制、分片等方式实现高可用和高并发。 4. 支持存储过程、触发器和事件等高级特性,可以在数据库层面实现复杂的业务逻辑。 5. 支持多种编程语言的 API,易于集成到各种应用中。 缺点: 1. 不支持 ACID(原子性、一致性、隔离性、持久性)事务,只支持基本的事务。 2. 对大数据量的处理不够高效,需要较大的内存和硬盘空间。 3. 系统复杂度较高,需要较长的学习和部署时间。 SQL Server: 优点: 1. 作为商业数据库,具有更好的稳定性和安全性,适合企业级应用。 2. 支持 ACID 事务,提供高度的数据一致性和完整性。 3. 具有强大的 BI(商业智能)功能,包括报表、分析、数据挖掘等。 4. 集成了 Microsoft 的其他产品,如 Visual Studio、Azure 等。 缺点: 1. 商业软件,需要购买授权,成本较高。 2. 不支持多个操作系统,只能在 Windows 上运行。 3. 性能不如 MySQL,在高并发和大数据量的情况下可能会出现性能瓶颈。 SQLite: 优点: 1. 轻量级,文件大小只有几百 KB,可以方便地嵌入到各种应用中。 2. 具有 ACID 事务,支持 SQL92 标准,易于使用。 3. 不需要独立的服务器进程或线程,可以直接访问本地文件,省去了网络传输和服务器部署的开销。 4. 高度可移植,支持多种操作系统和编程语言。 缺点: 1. 对于高并发和大数据量的处理能力有限,不适合大型企业级应用。 2. 不支持分布式部署,无法实现高可用和负载均衡。 3. 不支持多用户并发访问,只能单用户访问,不适合多用户同时读写的应用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老周聊架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值