【MySQL】InnoDB与MyISAM存储引擎的区别与选择

news2024/9/27 9:26:56

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。

存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。

MySQL5.5之后默认的存储引擎是InnoDB

InnoDB

InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的
MySQL 存储引擎

  • 特点

    • DML操作遵循ACID模型,支持事务;
    • 行级锁,提高并发访问性能;
    • 支持外键FOREIGN KEY约束,保证数据的完整性和正确性;
  • 文件
    xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结
    构(frm-早期的 、sdi-新版的)、数据和索引。

  • 逻辑存储结构
    在这里插入图片描述

    TableSpace:表空间;Segment:段;Extent:区;Page:页;Row:行

    • 表空间:InnoDB存储引擎逻辑结构的最高层,ibd 文件其实就是表空间文件,在表空间中可以包含多个Segment段。
    • 段:表空间是由各个段组成的, 常见的段有数据段、索引段、回滚段等。InnoDB中对于段的管理,都是引擎自身完成,不需要人为对其控制,一个段中包含多个区。
    • 区:区是表空间的单元结构,每个区的大小为1M。 默认情况下, InnoDB存储引擎页大小为16K, 即一个区中一共有64个连续的页。
    • 页:页是组成区的最小单元,页也是InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默认为 16KB。为了保证页的连续性,InnoDB 存储引擎每次从磁盘申请 4-5 个区。
    • 行:InnoDB 存储引擎是面向行的,也就是说数据是按行进行存放的,在每一行中除了定义表时所指定的字段以外,还包含两个隐藏字段(后面会详细介绍)。

有点类似于操作系统中对内存虚拟化的处理,分段分页(减少内存碎片)

MyISAM

MyISAM是MySQL早期的默认存储引擎

  • 特点
    • 不支持事务,不支持外键
    • 支持表锁,不支持行锁
    • 访问速度快
  • 文件
    xxx.sdi:存储表结构信息
    xxx.MYD: 存储数据
    xxx.MYI: 存储索引

InnoDB存储引擎和MyISAM存储引擎的区别

InnoDB支持事务,MyISAM不支持
InnoDB支持行级锁和表锁,MyISAM只支持表锁
InnoDB支持外键,MyISAM不支持

特点InnoDBMyISAMMemory
存储限制64TB
事务安全支持--
锁机制行锁表锁表锁
B+tree索引支持支持支持
Hash索引--支持
全文索引支持(5.6版本之后)支持-
空间使用N/A
内存使用中等
批量插入速度
支持外键支持--

存储引擎的选择

  • InnoDB:如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。

  • MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完
    整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。

    在生产环境中,读和插入操作为主时,我们可以优先选择 mongDB 替代MyISAM存储引擎,例如一些日志信息的记录。

  • MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是
    对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

    可以使用Redis替换MEMORY存储引擎

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

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

相关文章

【学习笔记二十一】EWM仓库两步拣配配置及操作展示

一、EWM两步拣配配置 1.定义两步拣配的WPT ①第一步:标准WPT2020,目标仓位是2010两步拣配的仓位,并创建存储类型2010的两步拣配的仓位 ②第二步,标准WPT2010,目标仓位9020发货区和发货的仓位 2.定义确定仓库处理类型的控制标识 3.确定仓库处理类型 4.仓库编码级别需要允…

React自定义Hook函数:高效组件开发的秘密武器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C语言(扫雷游戏)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

深入了解高保真线框:设计师必备利器推荐!

什么是高保真线框 高保真线框是低保真线框的高级版本。它不仅是一个更详细的草图,而且是一系列经过思考的“屏幕”,非常接近产品的最终外观和产品的主要功能。低保真度与高保真度线框的关键区别在于:低保真代表设计方向和整体布局&#xff0…

模块化以及生成

导入对象 >> pip install mock >> pip install pytest-mock 下面对coverage命令参数进行简单介绍。 coverage命令共有10种参数形式,分别是: run:运行一个Python程序并收集运行数据;report:生成报告&#x…

@NameBinding注解名称绑定过滤器/拦截器

NameBinding注解名称绑定过滤器/拦截器,只针对某一些资源方法执行处理逻辑 一、为什么要用名称绑定 一般情况下,借助Spring的过滤器或者拦截器等对Http请求或响应进行处理就能满足需求。但是在有些场景下若只需对特定的xxxResource做拦截处理&#xff0…

数据治理实战——元数据管理

一、元数据概述 1.1 定义 描述数据的数据,本质还是数据。数据本身带有的技术属性与其在业务运行中的业务属性,称其为元数据,例如:表数据量,占用空间,字段信息,业务描述,负责人&…

Springboot+Vue项目-基于Java+MySQL的在线文档管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

Gradio 流式输出教程

Gradio 流式输出教程 随着AIGC的发展,我逐渐发现我有许多项目,如果都是等待生成结束才传输出去,就会导致等待时间非常长,影响用户使用体验。在这里流式输出就显得很有必要了,同时也是为后续的实时处理积累一下前置条件…

​Game Maker 0.10:让创作、协作和游戏变得更简单

继去年 12 月成功发布 Game Maker 0.9 之后,我们又隆重推出 Game Maker 0.10。在 0.9 更新的主要增强功能基础上,该版本为创作者实现其愿景提供了更多改进和工具。 为此,The Sandbox 还正式启动了全球范围的创作者训练营,以帮助我…

【三维地图无人机路径规划】基于改进A星算法

课题名称: 基于改进A星算法的无人机三维地图路径规划 版本时间: 2024-04-22 程序运行: 直接运行AStar.m 文件即可 代码获取方式: QQ:491052175 VX:Matlab_Lover 改进方向: 预估函数增…

稀碎从零算法笔记Day56-LeetCode:组合总和 Ⅳ

题型:DP、数组 链接:377. 组合总和 Ⅳ - 力扣(LeetCode) 来源:LeetCode 题目描述 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的…

手撕AVL树(map和set底层结构)(1)

troop主页 今日鸡汤:Action may out always bring happiness;but there is no happiness without action. 行动不一定能带来快乐,但不行动一定不行 C之路还很长 手撕AVL树 一 AVL树概念二 模拟实现AVL树2.1 AVL节点的定义 三 插入更新平衡因子&#xff0…

mysql基础1——数据存储

mysql数据存储 共有4步 1)创建数据库 2)确认字段 3)创建数据表 4)插入数据 1)创建数据库 从系统架构看mysql数据库系统依次是数据库服务器,数据库,数据表和数据表的行与列 安装程序-->安装了数据库服务器 所有要做的第…

1.基于Springboot对SpringEvent初步封装

一:前置知识 Spring Event是Spring框架提供的一种事件机制,用于处理组件之间的通信。在复杂的系统中,模块或组件之间的通信是必不可少的。Spring Event可以用于以下场景: 1.系统间解耦:模块或组件之间通过事件进行通…

什么是防抖和节流?有什么区别? 如何实现?

防抖(Debounce)和节流(Throttle)是两种常用的技术手段,主要用于控制某个函数在一定时间内触发的次数,以减少触发频率,提高性能并避免资源浪费。 防抖(Debounce)的工作原…

openEuler-23.03下载、安装

一、下载 下载地址:openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 下载版本:openEuler-23.03-x86_64-dvd.iso 二、安装 cd /etc/sysconfig/network-scripts/ vi ifcfg-ens-33## 要修改部分 BOOTPROTOstatic## 新增部分 IPADDR192.168.1.128 …

AI觉醒派: 探索与AI协作路径,觉醒更强大的自己

AI觉醒派成立以来,微信社群已经壮大至几千人。许多新加入的小伙伴可能对我们还不够了解,今天,让我们通过这篇文章深入探讨我们的核心理念、梦想、以及如何借助人工智能觉醒更强大的自我。 🌟 AI觉醒派简介 AI觉醒派是一个探索人工…

深度学习入门(4)

神经网络的构建 import numpy as np import matplotlib.pyplot as plt def sigmoid(x):return 1/(1np.exp(-x)) def identity_function(x):#恒等函数return x def init_network():#进行权重和偏置的初始化,并保存到字典中network{}network[W1]np.array([[0.1,0.3,0…

清华大学:序列推荐模型稳定性飙升,STDP框架惊艳登场

获取本文论文原文PDF,请公众号留言:论文解读 引言:在线平台推荐系统的挑战与机遇 在线平台已成为我们日常生活中不可或缺的一部分,它们提供了丰富多样的商品和服务。然而,如何为用户推荐感兴趣的项目仍然是一个挑战。…