MySQL数据库:Innodb引擎下数据库的实现

【从零开始编写数据库系统】基于Python语言实现存储引擎 本文介绍了基于Python实现的数据库存储引擎,该系统由四个核心模块组成:RecordSerializer负责数据序列化,Page管理页内记录存储,DiskManager处理磁盘I/O,BufferPool提供内存缓存。存储引擎通过"页管理-磁盘交互-缓存优化-数据转换"的协同机制,实现了数据持久化、高效IO管理和完整性保障。系统采用分层架构,应用层请求经缓冲区管理层的LRU策略处理,未命中时通过磁盘管理层访问物理存储。数据流程包含读写两条路径,写入时记录经序列化存入脏页后刷盘,读取时优 阅读详情

前言

在程序开发中,总是离不开数据库的支持,如果你做过数据库数据恢复的话,就会发现数据库其实也是存储在磁盘上的文件,而不是我们平时在Navcat上面看到的那些序列数据。
文章只是对自己的思路做总结,如果觉得文章过于简单,请系统了解实现。

工作原理

在这里插入图片描述

数据存储

在数据库中我们常常选择innodb作为存储引擎,所以,我主要了解的也是这个。
在我们使用数据库的过程中,索引总是跟随着我们,比如主键索引。其实我们的表的数据就是通过索引树的形势存储,也就是聚簇索引(数据存储在叶子节点)。每次添加数据的过程就是对索引树的更新。

B+树

在这里插入图片描述
B+树的特点:
1、所有的非叶子节点只存储关键字信息。
2、所有卫星数据(具体数据)都存在叶子结点中。
3、所有的叶子结点中包含了全部元素的信息。
4、所有叶子节点之间都有一个链指针。

页的概念

在数据库的读取的过程中,每次只取一页数据,而不是单条数据或者是一次读取所有合适数据。
在MySQL中,数据存储是页,16K大小,所以把数据放在叶子节点,以减少创建新页的数量。

核心

在这里插入图片描述

添加数据

首先主键是自增的,只需要在树的最后一个叶子节点添加数据,如果页满了,分出新的页添加数据。(如果主键不是,需要在已存在的索引树中查找合适的位置插入,这样不仅需要查找位置,还会导致已存在的页发生变化。)

查找数据

主键索引查找,首先根据B+树查找到对应的页,在页里面存在一种类似于书的目录的数据结构,可以根据目录查找到对应的数据。

非聚簇索引,需要根据索引的值,查找带合适的位置,拿到数据的key,然后回表才能查询到具体的数据。

全表扫描,使用全表扫描的情况,没有合适的索引使用,或者MySQL分析出使用索引速度不如全表扫描,都会使用全表扫描(项目优化,往往需要判断某一条查询是否是全表)。

最后

几个问题:

  • 联合索引,为什么有左倾特性。
  • 删除数据的过程
  • 为什么选择B+树作为MySQL的索引树,而不是B树,B-树,红黑树。
  • like的模糊查询以%开头,会导致索引失效。
  • 覆盖索引:SQL只需要通过索引就可以返回查询所需要的数据,而不必通过二级索引查到主键之后再去查询数据。

文章参考:

文章1
文章2

MySQL数据库INNODB 表损坏修复处理过程 MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。 立即下载

相关推荐

innodb如何巧妙的实现事务隔离级别详解

前言 之前的文章mysql锁机制详解中我们详细讲解了innodb的锁机制,锁机制是用来保证在并发情况下数据的准确性,而要保证数据准确通常需要事务的支持,而mysql存储引擎innodb是通过锁机制来巧妙地实现事务的隔离特性中的4种隔离级别。 事务ACID特性,其中I代表隔离性(Isolation)。隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离。 我们都知道事务的几种性质,数据库中的一致性和隔离性等是实现事务的基本思想,在系统有大量的并发访问的情况下,了解和熟练应用数据库的本身的事务隔离级别,对于写出健壮性,并发处理能力强

数据库系列之TiDB存储引擎TiKV实现机制

TiDB存储引擎TiKV是基于RocksDB存储引擎,通过Raft分布式算法保证数据一致性。本文详细介绍了TiKV存储引擎的实现机制和原理,加深对TiDB底层存储架构的理解。

牧羊人的方向 4751

JWT实战:5分钟搞定Spring Boot集成JWT认证(含完整代码示例)

本文详细介绍了如何在Spring Boot中快速集成JWT认证,提供完整的代码示例和配置指南。通过JWT实现无状态认证,解决分布式系统中的会话管理问题,提升系统扩展性和安全性。涵盖令牌生成、验证、Spring Security整合及生产级优化方案。

weixin_29327525的博客 456

数据库篇之InnoDB存储引擎

InnoDB存储引擎的设计目标主要是面向在线事务处理OLTP的应用,它支持事务,特点是行锁设计、支持外键,并支持类似于Oracle的非锁定读(读操作默认是不加锁)。从MySQL5.5.8开始,MySQL存储引擎默认是InnoDB。InnoDB具有高可用性、高性能以及高可扩展性。InnoDB(1)通过多版本并发控制****MVCC来获得高并发性,并且实现了SQL标准的4种隔离级别,默认是可重复读级别。(2)同时使用一种****的策略来避免幻读的产生。

Withered Wood 3529

揭秘无人机前沿领域的科技新突破

本文旨在系统性地介绍无人机技术在前沿领域的最新突破,涵盖从基础理论到实际应用的各个方面。我们将重点关注那些正在改变无人机行业面貌的关键技术创新,并分析它们对未来发展的影响。文章首先介绍无人机技术的基础概念和背景,然后深入探讨六个关键领域的技术突破,接着分析实际应用案例,最后展望未来发展趋势。自主导航系统(SLAM):同时定位与地图构建技术,使无人机能在未知环境中自主导航计算机视觉(CV):使无人机能够"看"和理解周围环境的技术5G通信:第五代移动通信技术,提供高速、低延迟的数据传输能源管理。

AI天才研究院 1490

XGBoost算法案例 - 红酒品质分类

数据集共包含 11 个特征,共计 3269 条数据. 我们通过训练模型来预测红酒的品质, 品质共有 6 个各类别,分别使用数字: 0、1、2、3、4、5 来表示。

YIAN爱学习的博客 449

python是数据库语言吗_python – 我可以使用什么语言来快速执行此数据库摘要任务?...

我很难相信任何脚本没有任何事先知道的数据(不同于预先加载了这种信息的MySql),它将比SQL方法更快.除了解析输入的时间外,脚本还需要通过数组等“继续”排序.以下是第一个猜测,在SQL中,如果在表的aa,bb,cc列上按索引(*)顺序,那么应该在SQL中工作得很快. (可能的替代方案是“aa,bb DESC,cc”索引(*)此索引可以聚集或不聚集,不影响以下查询.选择聚类与否,需要“aa,bb,...

weixin_39637151的博客 123

AMD KFD的SDMA Packet 类型和定义解析

本文详细分析了AMD GPU架构中的SDMA(System Direct Memory Access)数据传输机制,重点介绍了其核心数据结构——SDMA Packet。SDMA通过8种主要Packet类型(包括内存拷贝、数据写入、屏障同步、中断触发等)实现高效主机-设备通信。每种Packet采用位域结构和联合体封装设计,在保证功能完整性的同时实现空间优化。这些Packet支持丰富的访问属性和扩展字段,适用于高性能数据搬运、内存初始化、任务同步、性能分析等场景,为GPU计算提供了灵活高效的数据传输解决方案。

图形/计算GPU的驱动与虚拟化技术分享园地 1245

MySQL之innodb数据库引擎

简介innodb事务型数据库的首选引擎,支持ACID事务,支持行级锁定。InnoDB是为处理巨大数据量时的最大性能设计。Innodb存储引擎完全与MySQL服务器整合,InnoDB存储引擎为主存中缓存数据和索引而维持它自己的缓冲池。InooDB存储它的表和索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。

王者之峰 6009

Qt/C++编写自定义控件42-开关按钮

一、前言 从2010年进入互联网+智能手机时代以来,各种各样的APP大行其道,手机上面的APP有很多流行的元素,开关按钮个人非常喜欢,手机QQ、360卫士、金山毒霸等,都有很多开关控制一些操作,在Qt widgets应用项目上,在项目中应用些类似的开关按钮,估计也会为项目增添不少新鲜感。 总结了大部分的开关按钮控件,基本上有两大类,第一类是纯代码绘制,这种对代码的掌控度要求比较高,但是灵活性比较好...

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 3327

Cesium.Ray 知识详解,示例代码

Cesium.Ray 是 CesiumJS 中用于表示三维空间中无限射线的核心类,广泛应用于地理信息系统(GIS)、三维可视化和碰撞检测等场景。射线由起点(origin)和方向向量(direction)定义,数学表达式为 ( P(t) = \text{origin} + t \times \text{direction} )。核心属性包括起点和方向向量,常用方法包括射线与平面的交点计算、根据距离获取射线上的点等。在 Cesium 中,Cesium.Ray 常用于地形碰撞检测、鼠标点选对象和雷达探测模拟等场景

大剑师兰特的GIS世界 425

重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现

本文转自互联网 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《重新学习MySQL数据库》其中一篇,本文部分内容来源于网络,...

AliCoder的博客 999

【项目实战】AES实施应符合NIST密码算法验证程序

AES由美国国家标准与技术研究院(NIST)制定。NIST是负责开发和维护美国政府使用的技术标准的机构,包括加密标准。

奶爸的编程之路,也就一周冷个三天 765

MySQL数据库引擎MyISAM和InnoDB的区别介绍

MySQL数据库有多种存储引擎:比如:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE等等,最常见的也就是MyISAM和InnoDB了,下面主要讲解下MyISAM和InnoDB两种mysql数据库存储引擎的区别。 MyISAM引擎是一种非事务性的引擎,提供高速存储和检索...

weixin_34388207的博客 184

使用Simulink进行基于IIR滤波器的设计与稳定性分析仿真

IIR滤波器的稳定性与其系统函数的极点位置密切相关。如果所有极点都位于Z平面的单位圆内,则该滤波器是稳定的;否则,滤波器将是不稳定的。在设计IIR滤波器时,确保其稳定性对于避免输出信号发散至关重要。明确你的系统需求,比如输入信号类型(如正弦波)、采样率、IIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通IIR滤波器,用来去除高于500Hz的所有频率成分,保留低于500Hz的信号成分。采样率为8kHz。

xiaoheshang_123的博客 150

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

重新学习MySQL数据库7:详解MyIsam与InnoDB引擎的锁实现

重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现 说到锁机制之前,先来看看Mysql的存储引擎,毕竟不同的引擎的锁机制也随着不同。 三类常见引擎: MyIsam :不支持事务,不支持外键,所以访问速度快。锁机制是表锁,支持全文索引 InnoDB :支持事务、支持外键,所以对比MyISAM,InnoDB的处理效率差一些,并要占更多的磁盘空间保留数据和索引。锁...

weixin_34419321的博客 177

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

一个系列搞懂Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现

Table of Contents 三类常见引擎: 如何选择存储引擎: Mysql中的锁 MyISAM的锁机制: 并发插入 锁调度 InnoDB锁模式 锁的实现方式: 何时在InnoDB中使用表锁: 死锁: 避免死锁: 说到锁机制之前,先来看看Mysql的存储引擎,毕竟不同的引擎的锁机制也随着不同。 三类常见引擎: MyIsam :不支持事务,不支持外键,所以访问速度快。锁机制是表锁,支持全文索引 InnoDB :支持事务、支持外键,所以对比MyISAM,InnoDB的处理效率差一些,并要占更多的

Viper的程序员修炼手册 1375

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

innodb 支持全文索引_重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现

本文转自互联网 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: http://www.how2playlife.com 本文是微信公众号【Java技术江湖】的《重新学习MySQL数据库》...

weixin_42497633的博客 146

mysql innodb myisam 插入数据_重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现...

本文转自互联网本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看喜欢的话麻烦点下Star哈文章首发于我的个人博客:本文是微信公众号【Java技术江湖】的《重新学习MySQL数据库》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。该系列博文会告诉你如何...

weixin_42128558的博客 281

MySQL存储引擎

前言 在ITOO5.0的时候,创建数据库遇到了一些问题,在解决问题的过程中也对MySQL有了一些了解,前面几篇博客介绍了MySQL的远程连接,基本操作、和一些常见错误的解决。这篇博客说说我之前在sql server中没有遇到的东西——MySQL数据库存储引擎。 MySQL存储引擎 存储 引擎就是指表的类型,数据库的存储引擎决定了表在计算机中的存储方式。 在这次ITOO5.0中遇到了

你若盛开,清风自来 1675

MySQL数据库引擎

       MySQL是我们常用的开源关系型数据库之一,我们在使用他们的时候,也应该适当了解一下其引擎的相关性能和选择要点。首先,什么是数据库引擎。1、什么是数据库引擎      数据库引擎是用于存储、处理和保护数据的核心服务。它利用不同的技术也就是不同的引擎将数据库的数据存储在内存和硬盘中。合理的选择和利用数据库引擎可以为服务带来良好的性能。不同的引擎有不同的特点,适应不同的工作环境和要求。2...

此心光明,亦复何言~ 204

Innodb 引擎和 Myisam 引擎对索引的实现

目录写在前面——索引类型主键索引唯一索引常规索引全文索引Innodb 引擎和 Myisam 引擎对索引的实现底层分析MyISAM 引擎的底层实现(非聚集索引方式)Innodb 引擎的底层实现(聚集索引方式、非聚集索引)为什么 InnoDB 只在主键索引树的叶子节点存储了具体数据,但是其他索引树却不存具体数据呢,而要多此一举先找到主键,再在主键索引树找到对应的数据呢?为什么InnoDB 和MyISAM 对比,MyISAM 查询性能更好? 写在前面——索引类型 在MySQL数据库,将索引的具体类型主要分为以下几

Qiaoshurui的博客 976

mysql 数据库引擎的选择_Mysql 三种数据库引擎的选择问题

我们的在创建数据库的时候,一些小型的项目不会太注意数据库的引擎,一些大型项目会考虑数据库的的引擎的问题,直接影响后面的使用。MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间...

weixin_33365844的博客 377
上一篇: 实现Excel下拉自动填补对应内容到后面单元格
下一篇: Map在方法中的引用传递问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝多芬也爱敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值