
MySQL
文章平均质量分 91
程序猿阿星
4年经验的Java程序猿,热爱技术,喜欢研究底层原理,有志同道合的猿类可以找我一起交流讨论~
公众号 : 「程序猿阿星」,欢迎关注
展开
-
InnoDB原理篇:为什么使用索引会变快?
前言 大家好,我是阿星。 本文就接上一篇文章【InnoDB原理篇:聊聊数据页变成索引这件事】来聊聊索引。 建议看完上篇文章再看本篇,食用效果最佳。 索引 假设给你一本非常厚的《Java编程思想》阅读,没有目录,你想快速找到某一个章节的知识点,那估计得找一会了,如果有目录就不一样。 索引其实就是为了提高数据查询的效率,就像书的目录一样,对于数据库的表而言,索引其实就是它的目录。 二叉搜索树 索引的实现种类繁多,比如常见的有序数组、哈希表、树等,不同的结构都有自己的适用场景和局限性,在数据库领域中,树结构是被广原创 2022-03-13 10:52:32 · 320 阅读 · 0 评论 -
InnoDB原理篇:聊聊数据页变成索引这件事
前言 大家好,我是阿星,真.好久不见。 我们从上一篇文章【InnoDB 对 Buffer Pool 的奇思妙想】得知,每个缓存页对应一个数据页。 正好就以数据页为起点,来聊聊InnoDB的索引。 数据页 我们都知道平时执行crud的时候,都会从磁盘上加载数据页到Buffer Pool的缓存页里去,更新缓存页后,由异步线程刷回磁盘的数据页。 所以MySQL进行数据操作的最小单位是数据页,接下来就分析分析,数据页到底长什么样。 每个数据页默认16kb的大小,数据页由多个部分组成,如下图所示 当然这么多概念,原创 2022-02-24 16:46:21 · 1097 阅读 · 0 评论 -
Buffer Pool 为了让 MySQL 变快都做了什么?
前言 大家好,我是阿星,又跟大家见面了。 相信很多小伙伴在面试中都被问过「为什么要用缓存?」,大部分人都是回答:「减少数据库的磁盘IO压力」。 但是MySQL真的有如此不堪吗? 每次增删改查都要去走磁盘IO吗? 今天就聊聊InnoDB对Buffer Pool的奇思妙想。 Buffer Pool 先梳理出问题,再思考如何解决问题。 假设我们就是InnoDB,我们要如何去解决磁盘IO问题? 这个简单,做缓存就好了,所以MySQL需要申请一块内存空间,这块内存空间称为Buffer Pool。 Buffer Po原创 2021-08-23 11:10:33 · 500 阅读 · 0 评论 -
redo log与binlog间的破事
前言 阿星在前面两篇文章都详细聊过redo log与binlog,有兴趣的朋友可以去看看前面两篇文章: 聊聊redo log是什么? 你必须知道的binlog日志 今天就来聊聊InnoDB是如何保证redo log与binlog两份日志之间的逻辑一致。 两阶段提交 redo log(重做日志)让InnoDB存储引擎拥有了崩溃恢复能力。 binlog(归档日志)保证了MySQL集群架构的数据一致性。 虽然它们都属于持久化的保证,但是则重点不同。 在执行更新语句过程,会记录redo log与binlog两块原创 2021-08-12 13:43:36 · 314 阅读 · 0 评论 -
不会吧,不会吧,还有人不知道 binlog ?
前言 上篇阿星详细聊了 redo log(重做日志),但是在MySQL数据库中还有一种二进制日志叫binlog(归档日志)。 redo log它是物理日志,记录内容是“在某个数据页上做了什么修改”,属于InnoDB存储引擎。 而binlog是逻辑日志,记录内容是语句的原始逻辑,类似于“给ID=2这一行的c字段加1”,属于MySQL Server层。 binlog 不管用什么存储引擎,只要发生了表数据更新,都会产生binlog日志。 那binlog到底是用来干嘛的? 可以说MySQL数据库的数据备份、主备、原创 2021-08-04 18:18:42 · 455 阅读 · 0 评论 -
聊聊redo log是什么?
前言 说到MySQL,有两块日志一定绕不开,一个是InnoDB存储引擎的redo log(重做日志),另一个是MySQL Servce层的 binlog(归档日志)。 只要是数据更新操作,就一定会涉及它们,今天就来聊聊redo log(重做日志)。 redo log redo log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。 比如MySQL实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。 上一篇中阿星讲过,MySQ原创 2021-07-28 12:03:23 · 598 阅读 · 0 评论 -
浅谈 MySQL InnoDB 的内存组件
前言 MySQL中执行一条SQL语句,相应表数据的读写都是由存储引擎去做(更新数据、查询数据)。 在这个过程,存储引擎需要决策一些事情 数据是从内存查还是从硬盘查 数据是更新在内存,还是硬盘 内存的数据什么时候同步到硬盘 所以存储引擎会按照内部逻辑与内存、硬盘交互。 我们可以按需选择存储引擎,比如常见的 InnoDB、MyISAM、Memory 等等。 众多存储引擎中,InnoDB是最为常用的,从 MySQL5.5.8 版本开始,InnoDB是默认的存储引擎。 InnoDB简介 InnoDB存储引擎原创 2021-07-23 12:50:05 · 312 阅读 · 1 评论 -
CRUD这么多年,你有了解过MySQL架构吗?
前言 目前大部分的后端开发人员对MySQL的理解可能停留在一个黑盒子阶段。 对MySQL基本使用没什么问题,比如建库、建表、建索引,执行各种增删改查。 所有很多后端开发人员眼中的MySQL如下图所示 导致在实际工作中碰到MySQL中死锁异常、SQL性能太差、异常报错等问题时,直接百度搜索。 然后跟着博客捣鼓就解决了,可能自己都没搞明白里面的原理。 为了解决这种知其然而不知其所以然的问题,阿星的重学MySQL系列会带着大家去探索MySQL底层原理的方方面面。 这样大家碰到MySQL的一些异常或者问题时,能够原创 2021-07-12 11:17:58 · 460 阅读 · 0 评论