【MySQL】MySQL技术内幕:深入理解 InnoDB 和 MyISAM 存储引擎

MySQL存储引擎MyISAM和InnoDB底层索引结构 目录 一 存储引擎作用于什么对象 二 MyISAM和InnoDB对索引和数据的存储在磁盘上是如何体现的 三 MyISAM主键索引与辅助索引的结构 1. 主键索引: 2. 辅助(非主键)索引: 四 InnoDB主键索引与辅助索引的结构 1. 主键索引: 2. 辅助(非主键)索引: 五 InnoDB索引结构需要注意的点 PS:为了更好地理解本文内容,我强烈建议先阅读完我的上一篇文章... 阅读详情

引言

MySQL的存储一引擎有很多,包括InnoDB 、MyISAM 、FEDERATED 、MEMORY、CSV等等,但常用的是前两个,5.1版本之前MySQL默认的存储引擎是MyISAM,之后的默认是InnoDB,那么这两种存储引擎底层有哪些区别,对性能又有什么影响呢?本篇将带你深入了解这些。

1. InnoDB

InnoDB 引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。

2. MyISAM

MyISAM没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。不过和InnoDB 不同,MyISAM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyISAM也是很好的选择。

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

3.1 两种存储引擎的区别小结

1、InnoDB支持事务,而MyISAM不支持事务。

2、InnoDB支持行级锁,而MyISAM锁的粒度是表级的。

3、InnoDB不支持全文索引FULLTEXT,而MyISAM支持。

4、InnoDB 中不保存表的具体行数,在执行select count(*) from table时,InnoDB要扫描全表来计算有多少行,但是MyISAM保存了表的具体行数,只要简单的读出保存好的行数即可。
5、InnoDB是聚簇索引,而MyISAM是非聚簇索引。

3.2 聚簇索引和非聚簇索引原理

由上述对比可知,InnoDB使用的是聚簇索引而MyISAM是非聚簇索引,事实上无论是聚簇索引还是非聚簇索引采用的都是B+树结构。B+树的结构如图所示:
在这里插入图片描述
InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上。若使用"WHERE id = 14"这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。若对name列进行条件搜索,则需要两个步骤:第一步在辅助索引B+树中检索name,到达其叶子节点获取对应的主键。第二步使用主键在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点即可获取整行数据。
MyISAM的是非聚簇索引,B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。非聚簇索引中,主键索引和辅助索引最大的区别在于主键索引中的key一定得是唯一的。非聚簇索引的两棵B+树看上去没什么不同,节点的结构完全一致,只是存储的内容不同而已,主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助键。表数据存储在独立的地方,这两颗B+树的叶子节点都使用一个地址指向真正的表数据,对于表数据来说,这两个键没有任何差别。由于索引树是独立的,通过辅助键检索无需访问主键的索引树。查找过程如下图所示:
在这里插入图片描述

4. 小结

InnoDB适用于事务处理、具有ACID事务支持等特性,如果在应用中执行大量INSERT和UPDATE操作,应该选择InnoDB,如果SELECT操作更多,则应该考虑MyISAM。

数据库学习03——深入理解 MySQL InnoDB 和 MyISAM 底层 B + 树的区别 InnoDB:聚簇索引叶子节点存储数据,辅助索引叶子节点存储主键值。MyISAM:索引叶子节点存储数据指针,数据单独存储在数据文件。 阅读详情

相关推荐

Java社招面试题:MySQL存储引擎 MyISAM 与 InnoDB 区别?——小米的社招血泪记

MyISAM和InnoDB的区别,可能是每一位Java程序员社招路上最容易忽略、却又最容易踩坑的问题。今天就听听小米是怎么因为这个问题差点在终面“翻车”的故事!

孤芳不自赏 965

InnoDB和MyISAM的区别

InnoDB和MyISAM的区别

weixin_44712778的博客 1万+

MySQL架构解析:了解后台存储引擎的工作原理

引言: MySQL的重要性和普遍使用 MySQL架构的基本介绍 MySQL体系架构概览: 客户端/服务器模型 连接处理、授权、安全性 MySQL体系架构的主要组件(线程处理,缓存等) 存储引擎概述: 存储引擎的作用和常见类型(例如InnoDB,MyISAM等) 如何选择合适的存储引擎 InnoDB存储引擎的深入理解: InnoDB的行锁设计 InnoDB的数据页结构 InnoDB的索引和事务处理 MyISAM存储引擎的深入理解: MyISAM存储引擎的特性和限制

哎 你看的博客 1376

MySQL技术内幕

MySQL技术内幕 MySQL体系结构和存储引擎 定义数据库和实例 实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。数据库实例才是真正用于操作数据库文件。 MySQL被设计为一个单进程多线程架构的数据库。MySQL数据库实例在系统上的表现就是一个进程。 MySQL数据库中,可以没有配置文件,在这种情况下,MySQL会按照编译时的默认参数设置启动实例,MySQL数据库会以读取到的最后一个配置文件中的参数为准。 MySQL体系结构 MySQL由以下几部分组成: 连接池

weixin_45720751的博客 1228

MySQL技术内幕:InnoDB存储引擎——深入剖析MySQLInnoDB的核心算法与数据结构

随着互联网和移动互联网的普及,数据量日益增长,海量的数据需要持久化存储。传统关系数据库由于设计简单、成本高、处理速度慢等缺点,很难满足业务需求,因此成为最多人使用的一种数据库。而目前,基于日志的事物型数据库比如MySQL成为主流选择,提供高可用、高性能和易维护的优点。但是MySQL的存储引擎MyISAM和基于磁盘的引擎InnoDB在效率、并发控制、备份恢复等方面都存在着一些短板。

AI天才研究院 2353

深入理解MyISAM和InnoDB:两种不同的存储引擎

通过这个例子,我们可以看到MyISAM和InnoDB在数据存储方式、事务支持、锁机制、插入速度、更新速度、删除速度和查询速度等方面的差异。:MyISAM是表格式存储引擎,它将每个表的数据存储在一个独立的文件中。而InnoDB是行格式存储引擎,它将每一行数据存储在一个单独的记录中,并使用B+树索引来提高查询效率。:由于MyISAM将数据存储在单独的文件中,因此插入速度通常比InnoDB快。但是,随着数据量的增加,InnoDB的插入速度可能会更快。但是,由于需要更新索引,所以更新速度可能会受到索引大小的影响。

理论都是虚的,代码才是王道。 247

Mysql之innodb

innodb

浪迹白杨的博客 2654

Abaqus CEL分析必备:Hypermesh网格导出与inp文件合并技巧

本文详细介绍了在Abaqus CEL分析中使用Hypermesh生成六面体网格并合并多组件inp文件的完整流程。从单元类型设置(EC3D8R)、网格质量优化到inp文件合并技巧,提供了一套解决流固耦合仿真前处理痛点的实战方案,帮助工程师高效完成复杂CEL分析任务。

weixin_29279101的博客 213

InnoDB 和 MyISAM 的区别

而SQL Serve在千万级以上,C#+存储过程,分页秒开,当然这其中也有C#的功劳,毕竟编译型语言执行效率要高于解释性语言。从备份&还原来看,后者易于前者,备份还原,或复制附加数据,非常简单。InnoDB最恼人的是ibdata1只能增大,无法缩小,只能全部备份、删除ibdata,然后全部恢复,相当于重新迁移数据库了。7、存储文件不同,Myisam这棵树的叶子结点存储数据是物理地址,InnoDB的叶子结点直接存储数据记录,这也是簇索引与非簇索引的区别。1、InnoDB支持事务,MyISAM不支持;

liyichuanZhengzhou的博客 3229

2025红队实战:Win11环境下ZAP、CobaltStrike与免杀套件深度评测

在网络安全领域,渗透测试与红队行动是评估系统防御能力的关键手段。其核心原理在于模拟真实攻击者的技术与流程,以发现潜在的安全漏洞。这项技术的价值在于主动识别风险,提升整体安全防护水平,广泛应用于企业安全评估、漏洞挖掘和攻防演练等场景。随着Windows 11系统普及,其增强的安全机制(如内存完整性、基于虚拟化的安全)对传统攻击工具链提出了新的挑战。本文聚焦于**CobaltStrike二开版**与**免杀套件**在Win11环境下的实战应用与深度对抗,探讨如何优化工具链以应对现代端点检测与响应(EDR)和高级

weixin_29315091的博客 308

从零到一:鲲鹏920服务器上的DeepSeek模型部署全流程解析

本文详细解析了在华为鲲鹏920服务器上部署DeepSeek模型的全流程,包括环境准备、模型服务框架部署、性能优化及生产环境方案。通过ARM架构优化和量化技术,显著提升模型推理效率,适用于企业级AI应用场景,助力国产化技术落地。

weixin_29094775的博客 599

还不了解 MyISAM 和 InnoDB 的区别?看这里就够了

  MyISAM 和 InnoDB 作为 MySQL 两大常用的存储引擎,经常在面试中被提及到。本文就来介绍一下它们之间的区别。 如果你想了解MySQL 存储引擎相关内容,请跳转链接:一文带你看懂 MySQL 存储引擎 区别:   1.InnoDB 支持事务,MyISAM 不支持。对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;   2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的In

扛麻袋的少年的博客 1万+

快衰落、慢衰落,平坦衰落、频率选择性衰落

目录一、大尺度衰落和小尺度衰落二、平坦衰落和频率选择性衰落1.反射墙、固定天线模型2.相干带宽和时延扩展三、快衰落和慢衰落1.反射墙、运动天线模型2.相干时间和多普勒扩展四、联系总结 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、大尺度衰落和小尺度衰落 移动无线信道的主要特征是信道强度关于时间和频率的变化,大致分两种: 大尺度衰落: .

weixin_45662974的博客 3万+

MySQL存储引擎深度解析:从MyISAM到InnoDB的技术演进与实践

存储引擎是数据库管理系统中负责数据的存储、检索和管理的组件。在MySQL中,存储引擎处于文件系统之上,负责在数据库和物理存储之间进行数据转换。-- 查看MySQL支持的存储引擎-- 查看当前数据库的存储引擎。

深耕互联网架构与AI领域多年,专注大模型工程化、云原生架构、AI驱动系统,分享实战经验、前沿技术和架构方法论。每周产出深度长文+技术短文,涵盖大厂案例、论文解读与工程实践。拒绝水文,只讲干货。关注我,与一线架构师共同探索技术本质。 1987

ASP.NET Core Identity + Mysql(实战一)——注册登陆

在进行实战之前,我们先来了解一下Identity。 ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格、登录和用户数据存储。简单的来讲包括: 1.用户数据存储(使用任意你喜欢的关系型数据库,从sqllite到mysql、sqlserver等等,由Entity Framwork 支持) 2.登陆、注册外加身份认证(基于coo...

weixin_40359716的博客 1399

【STM32Cube_14】使用硬件I2C读写环境光强度传感器(BH1750)

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)

Mculover666的博客(嵌入式) 7242

【MySQL】InnoDB和MyISAM区别详解(MySQL专栏启动)

文本适合解决:你们公司用什么存储引擎?InnoDB和MyISAM 区别?为什么选择InnoDB?什么事聚簇索引什么是非聚簇索引?InnoDB如何存储数据?如何选择存储引擎?InnoDB为什么推荐用自增ID做主键?等类似的问题。

小明的Java问道之路 4964

【Burp入门第三十三篇】BurpSuite+Proxifier安装配置,实现微信小程序抓包

本文介绍Burp+Proxifier安装配置,实现微信小程序抓包

等风来 5873

MySQL 存储引擎 MyISAM与InnoDB 的区别

(1) InnoDB支持事务,MyISAM不支持;(2) InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;(3) InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

2401_87878486的博客 1199

开篇词:学习系统分析师的好处?核心考点有哪些?

系统分析师备考指南 系统分析师是IT行业的高级专业人才,具备系统分析与设计能力,能指导开发团队工作。学习系统分析师不仅能获得职业晋升的"黄金跳板",还能全面提升技术架构思维和业务理解能力。 核心价值: 职业发展:晋升管理岗位的硬性要求,突破职业天花板 能力提升:构建T型知识结构,培养架构思维和软技能 市场竞争力:成为"业务+技术"桥梁,获得国家级专业认证 考试内容: 计算机基础知识(硬件、操作系统、网络等) 系统分析专业知识(软件工程、架构设计等) 进阶知识(企业信息

数据知道的博客 5940

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

InnoDB与MyISAM的详细对比与选择:从理论到实践

InnoDB:适合需要事务支持、高并发和数据一致性的场景。MyISAM:适合读多写少、不需要事务支持的场景。在实际应用中,建议优先使用InnoDB,因为它在大多数场景下表现更优,并且具有更好的数据安全性和恢复能力。参考资料MySQL官方文档InnoDB与MyISAM的区别InnoDB的四大特性。

阿新的博客 1560

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MySQL技术内幕-InnoDB存储引擎

MySQL技术内幕-InnoDB存储引擎

young_man2的博客 2224

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MySQL 高级 —— 深入理解 InnoDB 与 MyISAM

引言 本篇主要聚焦MySQL 存储引擎的优缺点。 一、InnoDB 和 MyISAM 存储引擎的比较

Morty的技术乐园 841

MySQL存储引擎深入理解

一、什么是存储引擎 1.1 存储引擎概述 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是插件式存储引擎。 Oracle,SQL Server等数据库只有一种存储引擎。MySQL提供了插件式的存储引擎架构。所以MySQL存在多种存储引擎,可以根据需要使用相应引擎,或者编写存储引

緑水長流*z 2534

深入理解MySQL事务以及存储引擎

在MySQL数据库中,事务与存储引擎是两个密切相关的概念,它们共同决定着数据的一致性、可靠性和性能。事务处理是保证数据库操作原子性、一致性、隔离性和持久性的关键机制,而存储引擎则是MySQL用来管理数据存放和访问的具体实现。

hy199707的博客 1363
上一篇: 【MySQL】执行计划EXPLAIN详解
下一篇: 【随笔】写在2020除夕之夜
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值