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进行通信。减少…

代码笔记:Linux系统上解压文件

zip unzip filename.zip -d /path/to/directorytar.gz tar -xzvf file.tar.gz -x: 表示提取(extract)文件,从压缩包中解压内容。-z: 表示使用 gzip 压缩,.tar.gz 文件是经过 gzip 压缩的 tar 包,因此需要这个选项来处…

存储设备专栏 2.5 -- linux 下块设备信息查看命令 lsblk 详细介绍】

> 请阅读【嵌入式及芯片开发学必备专栏】< 文章目录 lsblk 命令命令结构常用参数示例示例 1&#xff1a;基本用法示例 2&#xff1a;显示文件系统信息示例 3&#xff1a;仅列出磁盘示例 4&#xff1a;指定输出格式示例 5&#xff1a;以 JSON 格式输出 Summary lsblk 命令…

算法之二分查找

概述 二分查找算法的应用&#xff0c;包括有序和无序数据&#xff0c;有序数组默认按从小到大排序 在有序数组中找到num /*** 4 二分查找 在有序数组中找到num* 思路&#xff1a;找中值&#xff0c;然后中值元素和目标值比较。如果中值元素比目标值大&#xff0c;则继续在左…

React开发一个WebSocket

export default class SocketService {static instance null;static get Instance() {if (!this.instance) {this.instance new SocketService();}return this.instance;}// 和服务端连接的socket对象ws null;// 存储回调函数callBackMapping {};// 标识是否连接成功connec…

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

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

Prometheus 抓取 nginx 访问日志的指标

要通过 Prometheus 的 NGINX Exporter 来抓取 NGINX 中的日志信息&#xff0c;例如状态码为 4xx 或 5xx 的日志&#xff0c;需要结合以下几种工具和方法&#xff1a; 1. NGINX Exporter 基础功能 NGINX Exporter 是一个 Prometheus Exporter&#xff0c;用于从 NGINX 的 /sta…

.mkp勒索病毒攻击全攻略:防护、数据恢复与安全建议

导言 随着互联网的发展&#xff0c;勒索病毒的威胁也在不断升级&#xff0c;给个人和企业的数据安全带来了巨大的挑战。其中&#xff0c;[datastorecyberfear.com].mkp、 [tsai.shenmailfence.com].mkp、 [sspdlk00036cock.li].mkp勒索病毒作为一种新型的加密型恶意病毒&#…

Chromium 中HTML5 WebSocket实现分析c++(一)

一、WebSocket前端接口定义&#xff1a; WebSocket 对象提供了用于创建和管理 WebSocket 连接&#xff0c;以及可以通过该连接发送和接收数据的 API。 使用 WebSocket() 构造函数来构造一个 WebSocket。 构造函数 WebSocket(url[, protocols]) 返回一个 WebSocket 对象。 …

如何读书?

如何读书&#xff1f; 方法论、读书、意义、思考背景 对于知识获取一直有一个疑问&#xff0c;那就是如何有效获取知识&#xff1f;这个答案我自己并没有总结出来&#xff0c;其一是本文要谈的读书&#xff0c;其他呢&#xff1f;多了暂未想到&#xff0c;先写读书吧。 恰巧…

System:oneshot类型的service

有的时候,某个进程只在特殊的情况下运行一下即可,不需要一直以服务的形式待命,这种情况下,可以设置service的type为oneshot,然后设置RemainAfterExit=yes。 这样设置的service,即使在其进程启动完成之后退出了,systemd 也仍然会认为这个服务还在运行中,将此服务视为活…

新时代下吉林省城乡流动人才就业问题及路径探析

摘要&#xff1a;新时代背景下&#xff0c;中国经济快速发展&#xff0c;城乡融合发展成为缩小城乡差距&#xff0c;推动共同富裕的重要方式。吉林省作为东北老工业基地&#xff0c;传统产业竞争优势减弱&#xff0c;城乡流动人才就业规模增加&#xff0c;并呈现“农村-城市”的…

prompt learning

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

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

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

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

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

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

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

3.1.1ReactOS系统中搜索给定长度的空间地址区间函数的实现

系列文章目录 //搜索给定长度的空间地址区间 PMADDRESS_SPACE AddressSpace,//该进程用户空间 ULONG_PTR Length,//寻找的空间间隔大小 ULONG_PTR Granularity,//粒度位&#xff0c;表明空间起点的对齐要求&#xff0c;注意是起点地址 ULONG_PTR TopDown);函数的定义&#xf…

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

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

html5的简单问题

1.html5结构语义化 用正确的标签做正确的事情。 便于团队的开发和维护&#xff0c;在没有加载css的情况下也能呈现较好的内容与结构代码&#xff0c;易于阅读。 有利于seo&#xff0c;提高可访问性。 2.html5新特性 增加&#xff1a;用于媒介回访的video和autio元素&#…

NVIDIA Jetson支持的神经网络加速的量化平台

NVIDIA Jetson支持的神经网络加速的量化工具、技术 NVIDIA Jetson 是专为边缘计算和嵌入式系统设计的高性能计算平台&#xff0c;它支持多种深度学习模型的部署和推理。对于神经网络加速的量化平台&#xff0c;Jetson 支持以下技术和工具&#xff1a; TensorRT&#xff1a;Ten…