MySQL新手向:对比常用存储引擎

前言

为什么MySQL拥有的存储引擎有那么多,偏偏最常用的是InnoDB呢?带着这个问题,让我们对比几种常用的存储引擎,理解InnoDB的优势吧。

一、MyISAM存储引擎

1.1、MyISAM介绍

先说说MyISAM存储引擎的特点:

  • 不支持事务
  • 表锁设计
  • 支持全文索引

再针对它最大特点,为什么不支持事务,我们来具体说说为什么?

MyISAM 存储引擎之所以不支持事务(ACID特性),主要是因为它的设计目标是那些对数据库的查询操作远多于修改操作的应用。所以在设计上,MyISAM 强调的是简单性和速度,而不是数据的一致性或回滚能力,这使得它非常适合用于只需要很少写入操作或者写入操作不会频繁导致需要回滚的场景。

1.2、为什么不支持事务?

接下来我们再根据以下是几个关键点来解释为什么 MyISAM 不支持事务:

  1. 性能优化:MyISAM在它的缓冲池中只缓存索引页而不是实际的数据页,这减少了内存使用并提高了查询速度。如果是事务处理,则需要额外的开销,如记录日志以便在失败时可以恢复到某个一致的状态,而这对于 MyISAM 来说是一种不必要的负担。
  2. 简单性:事务处理增加了复杂性,需要实现锁定机制、日志系统等,而这些都不适合 MyISAM 这种旨在提供快速查询的设计理念。
  3. 表级锁定:MyISAM 使用表级锁定,这意味着当一个用户正在更新一个表的时候,其他想要更新相同表的用户必须等待,直到当前的更新完成。这种锁定机制简单且易于实现,但是不适合需要行级锁定的事务处理。
  4. 数据一致性:事务的主要目的是保证数据的一致性,即使是在系统崩溃的情况下也能恢复数据。而 MyISAM 没有提供这样的保护措施,因此在某些情况下可能会导致数据丢失或损坏。

尽管 MyISAM 在某些方面存在限制,但它仍然非常适合那些不需要事务特性的应用。例如,在构建数据仓库或是任何只需要读取大量数据而不经常修改数据的应用时,MyISAM 可能是一个不错的选择。

随着 MySQL 的发展,InnoDB 成为了 MySQL 5.5.8 及更高版本中的默认存储引擎,因为它支持事务处理,并提供了更高级的功能,如行级锁定和外键支持。然而,这并不意味着 MyISAM 完全过时了,它仍然有其适用的场景。

二、Memory存储引擎

见名知意,内存存储引擎,代表着它最大的特点就是将表中的数据存放在内存中,但是因此它也是非常危险的,如果数据库重启或系统崩溃,则会导致表中数据全部消失。因此,它其实的话,非常适合于存储临时数据的临时表,以及数仓系统中的经纬度表。

虽说Memory存储速度非常快,但是在使用上仍然是有一定限制,如:只支持表锁,并发性差,不支持text和blob列类型。

三、InnoDB存储引擎

InnoDB存储引擎支持事务,其设计目的在于面向在线事务处理的应用。其特点为:

  • 行级锁定:这使得InnoDB能够支持高并发的写操作,相比于MyISAM的表级锁定,行级锁定大大减少了操作间的冲突。
  • 支持外键:外键约束加强了数据库中表与表之间的参照完整性。
  • 非锁定读取:InnoDB通过多版本并发控制(MVCC)技术实现了非阻塞性的读操作,这使得读取请求不会因写操作而被延迟。
  • 四种隔离级别:InnoDB支持SQL标准定义的所有四种隔离级别,通过next-key locking机制防止了幻读现象的发生。
  • 高级功能:诸如插入缓冲、二次写机制、自适应哈希索引以及预读等特性,都提升了InnoDB的性能和可用性。
  • 聚集索引:InnoDB按照主键顺序存储表中的数据。若无显式指定主键,则会自动生成一个6字节的ROWID作为主键。

在MySQL5.5.8开始,已成为了默认的存储引擎。

四、为什么MySQL采用了InnoDB?

MySQL最初提供了多种存储引擎供用户选择,每种引擎都有其特点和适用场景。MyISAM曾经是默认的存储引擎,但是随着技术的发展和需求的变化,InnoDB逐渐成为了MySQL中的默认存储引擎,并且在大多数场景下被推荐使用。以下是几个原因:

  1. 事务支持: InnoDB支持事务处理,这是现代数据库系统的关键功能之一。事务处理确保了数据操作的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),即所谓的ACID特性。这对于需要可靠性和一致性的应用程序来说至关重要。
  2. 并发控制: InnoDB使用行级锁定机制来管理并发访问,这允许更高的并发性,尤其是更适合现在网络环境这种高工作负载下。相比之下,MyISAM使用表级锁定,这意味着当一个线程正在更新表时,其他所有线程都必须等待。
  3. 多版本并发控制(MVCC): InnoDB还实现了MVCC,允许读取操作与写入操作并行进行而不会互相阻塞。这种机制使得读取操作可以查看之前版本的数据,而不会干扰正在进行的写入操作。
  4. 恢复机制: InnoDB有一个内置的恢复机制,能够在系统崩溃后自动恢复未完成的事务,并确保已提交的事务数据的完整性。
  5. 外键支持: InnoDB支持外键约束,这有助于保持数据库内数据的一致性。外键可以强制执行引用完整性,确保在插入或删除记录时不会破坏关系。

五、总结

总之,选择哪种存储引擎取决于具体的应用场景和需求。虽然InnoDB功能强大,但在某些特定情况下,如只需要基本的查询功能时,MyISAM仍是一个合理的选择。了解各种存储引擎的特点和适用场景,可以帮助我们做出更为高性价比的选择。

最后的最后,希望这次的学习能够帮助到你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【协议】IIC总线协议学习

一、IIC基本介绍 设计I2C的初衷是减少电视机等复杂电子系统内部的布线数量,同时也降低制造成本。通过使用只有两根线的通信总线,它有效地减少了器件间连接的复杂性。 IIC总线是两线制总线,仅有串行数据线SDA和串行时钟线SCL进行通信。减少…

【Python实例】Python读取并绘制tif数据

【Python实例】Python读取并绘制tiff数据 Python实例-以全球不透水面积数据为例数据准备:全球不透水面积数据基于gdal库绘制tif图基于Rasterio库绘制tif图 参考 GeoTIff 是一个标准的.tif 文件或是一个图像文件格式,它包含了一些额外的空间信息&#xff…

prompt learning

prompt learning 对于CLIP(如上图所示)而言,对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改,比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…

业务开发常见问题-并发工具类

hello,大家好,本讲我们一起聊一下常见的几个并发工具类的使用和坑! 在日常工作中,我们经常会遇到多线程并发问题,比如ThreadLocal、锁、ConcurrentHashMap、CopyOnWriteArrayList等。那么如何正常的使用呢?…

【最新通知】2024年Cisco思科认证CCNA详解

CCNA现在涵盖安全性、自动化和可编程性。该计划拥有一项涵盖IT职业基础知识的认证,包括一门考试和一门培训课程,助您做好准备。 CCNA培训课程和考试最近面向最新技术和工作岗位进行了重新调整,为您提供了向任何方向发展事业所需的基础。CCNA认…

blender分离含有多个动作的模型,并导出含有材质的fbx模型

问题背景 笔者是模型小白,需要将网络上下载的fbx模型中的动作,分离成单独的动作模型,经过3天摸爬滚打,先后使用了blender,3d max,unity,最终用blender完成,期间参考了众多网络上大佬…

【Ansiable】ansible的模块和主机清单

目录 一、介绍一些运维自动化工具 二、Ansible 概述/简介 三、Ansible 工作机制 3.1 内部工作机制 3.2 外部工作机制 四、Ansible 执行流程 五、Ansblie 安装以及日常操作模块***** 5.1 ansible 环境安装部署 5.2 ansible 命令行模块 5.2.1 command 模块 5.2.2 shel…

明源云ERP报表服务GetErpConfig.aspx接口存在敏感信息泄露

一、漏洞简介 在访问 /service/Mysoft.Report.Web.Service.Base/GetErpConfig.aspx?erpKeyerp60 路径时,返回了包含敏感信息的响应。这些信息包括但不限于数据库连接字符串、用户名、密码、加密密钥等。这些敏感信息的暴露可能导致以下风险:数据库访问…

【IPv6】IPv6 NAT66介绍

参考链接 IPv6-to-IPv6 Network Address Translation (NAT66) (ietf.org)https://datatracker.ietf.org/doc/id/draft-mrw-nat66-00.html IPv6 NAT66 NAT66,全称为Network Address Translation for IPv6 to IPv6,是一种用于IPv6网络的地址转换技术。在…

Tkinter -- python GUI学习与使用

前言 python GUI 目前pythonGUI有很多,哪一个最好? 先说说我选择的思路,我的目的是开发一个易用的软件,最重要的是稳定,并且碰到问题能够解决,因此,我的目标很明确,有比较大的用户群…

基于Python的自然语言处理系列(39):Huggingface中的解码策略

在自然语言生成任务中,如何选择下一步的单词或者词语对生成的文本质量影响巨大。Huggingface 提供了多种解码策略,可以在不同的场景下平衡流畅度、创造力以及生成效率。在这篇文章中,我们将逐步介绍 Huggingface 中的几种常见解码策略&#x…

web API基础

作用和分类 作用: 就是使用 JS 去操作 html 和浏览器 分类: DOM (文档对象模型)、 BOM (浏览器对象模型) 什么是DOM DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口。 HTML DOM 定义了访问和操作 …

mingw64的Windows安装及配置教程gcc、g++等

mingw64.rar 链接:https://pan.baidu.com/s/18YrDRyi5NHtqnTwhJG6PuA 提取码:pbli (免费永久有效,免安装,解压后配置环境变量即可使用) 1 下载 解压后随便放到一个地方: 复制“bin”路径&am…

重磅:中国首个SVG技术标准发布,计育韬老师主笔起草

编辑搜图 中华人民共和国《融媒体 SVG 交互设计技术规范》是由复旦大学奇点新媒体研究中心等单位牵头,学科带头人计育韬等人主要起草,并于 2024 年 8 月起面向全社会行业从业者发布的最高技术标准。该标准前身为 2016 年计育韬与微信团队合作拟定的《SV…

置分辨率设置多显示器的时候提示, 某些设置由系统管理员进行管理

遇到的问题 设置分辨率设置多显示器的时候提示(如下图所示): 某些设置由系统管理员进行管理 解决方法 先试试这个方法: https://answers.microsoft.com/zh-hans/windows/forum/all/%E6%9B%B4%E6%94%B9%E5%88%86%E8%BE%A8%E7%8…

强大的Python必备库,你知道几个?建议收藏!

在Python的世界里,库的丰富性让开发者的工作变得轻松而高效。那么,你知道哪些强大的Python必备库吗? 面对众多的Python库,如何选择适合自己的工具来提升开发效率和代码质量?,丰富多样的库如同一个个强大的…

AnaTraf | 提升网络性能:深入解析网络关键指标监控、TCP重传与TCP握手时间

AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具 在当今的数字化时代,网络的稳定性和性能对企业的运营效率至关重要。无论是内部通信、应用程序的运行,还是对外提供服务,网络都发挥着关键作用。对于网络工程师或IT运维人员…

EasyX图形库的安装

前言 EasyX是一个图形库,可以用来做一些c/c小游戏,帮助学习。 一、进入EasyX官网 https://easyx.cn/ 二、点击下载EasyX 三、下载好后以管理员身份运行它 四、点击下一步 五、然后它会自动检测你的编辑器,用哪个就在哪个点安装 六、安装成功…

【linux问题】Linux命令行终端窗口的输出,显示不全问题

Linux命令行终端窗口的输出,显示不全问题 问题: 图中显示的是一个Linux命令行终端窗口, nmcli dev wifi 是一个命令——列出所有能用的Wi-Fi。 执行命令后,窗口输出了显示了所有能用的Wi-Fi网络列表。 但是在每一行末尾有一个“…

KPaaS:基于微服务架构的低代码平台

基于微服务架构的低代码平台是当前企业数字化转型的重要工具。通过将微服务架构与低代码平台结合,可以实现高效、灵活且可扩展的应用开发。在当今数字化转型的浪潮中,企业面临着诸多挑战,其中IT资源有限以及对高效开发的需求尤为突出。KPaaS业…