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.rhkb.cn/news/453808.html

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

相关文章

ZYNQ:流水灯实验

实验目的 PL_LED0 和 PL_LED1 连接到 ZYNQ 的 PL 端,PL_LED0 和 PL_LED1循环往复产生流水灯的效果,流水间隔时间为 0.5s。 原理图 程序设计 本次实验是需要实现两个LED的循环熄灭点亮,时间间隔是0.5S,对时间间隔的控制使用计数器来完成。本…

第十九课:Python学习之继承

继承 目标 单继承多继承 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中继承 实现代码的重用,相同的代码不需要重复的编写多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度 01. 单继承 …

安装buildkit,并使用buildkit构建containerd镜像

背景 因为K8s抛弃Docker了,所以就只装了个containerd,这样就需要一个单独的镜像构建工具了,就用了buildkit,这也是Docker公司扶持的,他们公司的人出来搞的开源工具,官网在 https://github.com/moby/buildkit 简介 服务端为buildkitd,负责和runc或containerd后端连接干活,目前…

MySQL 查询按照更新时间排序遇到相同更新时间的会少数据

MySQL分页后出现重复数据或丢失记录的原因可能包括:SQL查询条件不一致、使用了不稳定的排序、LIMIT语句与ORDER BY配合问题、缓存设置不当或数据库复制配置错误。需要检查查询逻辑和系统配置以解决这些问题。 MySQL分页导致数据重复的原因: 1、排序算法…

如何有效维护您的WordPress在线商店内容:提高客户参与度与转化率的实用技巧

在电子商务领域,内容为王。新鲜、相关且有吸引力的内容能显著提升客户参与度和转化率。本文将探讨如何有效更新和维护您的在线商店内容,确保客户始终获得最佳体验。 定期更新产品信息 产品描述 产品描述是吸引客户和促成销售的关键。定期检查并更新产…

Netty基础原理

1.Netty概述 Netty是由JBoss提供的开源的高性能、异步事件驱动的网络应用框架,通过Netty可以很快的构建出通信效率极高的应用; 异步与同步是相对的,在请求或执行过程中,如果会阻塞等待就是同步,反之就是异步 1.1 Net…

vue3纯前端验证码示例

前言 验证码的用途:通过要求用户输入一串难以被机器自动识别的字符或图像,有效阻止恶意用户或脚本通过暴力破解方式尝试登录账户。验证码的分类:常见的验证码有短信、文本、图形等,安全度越高,依赖的插件或服务也越多…

ENSP环回路由的配置

环回路由配置如下,网段及其基础配置已写完。为了实现全网通,需要给路由器手写配置,使用 ip route—static目标网段下一跳。把所有情况都要考虑到,就会出现去往一个网段的最优路径和次优路径,近路和远路都能前往目标网段…

Spire.PDF for .NET【页面设置】演示:在 C# 中应用 PDF 页面转换

当您在导出为 PDF 格式的文档中翻页时,页面过渡会显示装饰效果,例如溶解或擦除。当您以 PDF 格式创建幻灯片时,页面过渡特别有用。Spire.PDF是一款专为开发人员设计的强大 .NET 组件,可让您将页面过渡应用于 PDF 文件。 这里介绍…

【新专栏】Excel数据分析与模拟决策

专栏入口:Excel数据分析与模拟决策 主要面向使用Excel的用户,讲解Excel的数据分析,模拟分决策内容,内容涵盖基于Excel的统计分析,数据生成,采样,假设检验,线性回归,线性规…

大语言模型(LLM)入门级选手初学教程

链接:https://llmbook-zh.github.io/ 前言: GPT发展:GPT-1 2018 -->GPT-2&GPT-3(扩大预训练数据和模型参数规模)–> GPT-3.5(代码训练、人类对齐、工具使用等)–> 2022.11 ChatG…

海外云手机:出海电商养号智能化方案

随着出海电商的迅猛发展,使用海外云手机进行养号已经成为越来越多商家的新选择。尤其在社交电商推广和短视频引流方面,海外云手机不仅提高了流量的精准度,还助力商家实现业务的快速增长。本文将探讨海外云手机养号相较于传统模式的优势&#…

STM32CubeIDE(Eclipse)Post-build steps添加带参.exe实现全流程(1):带参.exe制作

0 工具准备 vscode,编辑C代码 Code Runner插件,用于生成exe 1 前言 使用STM32CubeIDE编译生成了二进制镜像文件后,有时为了防止镜像被恶意修改,可以通过添加校验和来对整个镜像进行保护,实现手段就是在STM32CubeIDE工…

精华分享 | 大模型LLM微调技巧与实践总结

导读 本文总结了作者在ChatGLM-6B模型微调的经验,并汇总了目前开源项目&数据。 写在前面 大型语言模型横行,之前非常焦虑,现在全面拥抱。目前也有很多开源项目进行大模型微调等,笔者也做了一阵子大模型了,特此来…

datawhale大模型bot应用开发--task4:图片流

一、图像流是专门用于图像处理的一个流程工具 在图像流中,你可以通过可视化的操作方式灵活添加各种用于图像处理的节点,构建一个图像处理流程来最终生成一个图像。图像流发布后,支持在 Bot 或工作流中使用。 二、图像流的能力范围 类型 图…

【Linux】进程--详细解释进程

目录 1、冯诺依曼体系结构 2、操作系统 3、进程 4、环境变量 5、进程地址空间 6、页表(简单初步理解) 1、冯诺依曼体系结构 a、存储器指的是:内存 外设: b、输入设备:鼠标,键盘,摄像头&am…

宠物用品在线交易:SpringBoot开发实战

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

Python入门(一)

心血来潮就干:python课程走起 和你一起学习 Python 语言的基础语法。你将会系统性地学习 Python 基础知识; 直接开始吧~ 本篇文章将了解编程的几个基础概念。并且,你将学到如何在电脑屏幕上输出数字、文字,并敲出你…

ChatGLM4重磅开源! 连忙实操测试一波,效果惊艳,真的好用!附带最新相关资料和喂饭级实操推理教程!!

本文目录 GLM4重磅开源啦 GLM4系列版本介绍 GLM4大模型能力测评结果 经典测评任务结果 长文本能力 工具调用能力 多模态能力 手把手实操GLM-4-9B-Chat推理预测&&效果展示 GLM4运行硬件和环境要求 配置对应的库环境 使用peftbitsandbytes 进行4位量化推理 进…

Java基础12-特殊文件和日志技术

十二、特殊文件和日志技术 1、特殊文件 properties:用来存储键值对数据。 xml:用来存储有关系的数据。 1.1 properties文件 特点:存储键值对,键不能重复,文件后缀一般是.properties结尾的。 properties:是…