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

您所在的位置:网站首页 日本浏览引擎有哪些 MYSQL有哪些存储引擎,各自优缺点。

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

2024-03-10 23:12| 来源: 网络整理| 查看: 265

欢迎大家关注我的公众号【老周聊架构】,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 引擎。

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3