![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 83
xiaolege_
目前重点研究Spring、Spring boot、Spring cloud、Kafka、Flink、Xxl-job、MySQL、Elastic search、Redis、Docker等,欢迎大家关注交流。
展开
-
InnoDB原理篇:Change Buffer是如何提升索引性能的
前言相信很多小伙伴设计索引时,考虑更多的是索引是否能覆盖大部分的业务场景,却忽略了索引的性能。什么?不同的索引,性能还不一样?是的,这要从change buffer说起。Change Buffer是什么MySQL在启动成功后,会向内存申请一块内存空间,这块内存空间称为Buffer Pool。Buffer Pool内维护了很多内容,比如缓存页、各种链表、redo log buff、change buffer等等。回到正题,change buffer是用来干嘛的?当索引字转载 2022-03-31 11:20:55 · 329 阅读 · 0 评论 -
InnoDB原理篇:如何用好索引
前言现在聊聊,我们如何用好索引InnoDB中索引分类我们都知道InnoDB索引结构是B+树组织的,但是根据数据存储形式不同可以分为两类,分别是聚簇索引与二级索引。ps:有些同学还听过非聚簇索引和辅助索引,其他它们都是一个意思,本文统一称为二级索引。聚簇索引聚簇索引默认是由主键构成,如果没有定义主键,InnoDB会选择非空的唯一索引代替,还是没有的话,InnoDB会隐式的定义一个主键来作为聚簇索引。其实聚簇索引的本质就是主键索引。因为每张表只能拥有一个主键字段,所以每张表只有一转载 2022-04-06 09:09:58 · 260 阅读 · 0 评论 -
InnoDB原理篇:为什么使用索引会变快
前言大家好,我是阿星。本文就接上一篇文章【InnoDB原理篇:聊聊数据页变成索引这件事】来聊聊索引。建议看完上篇文章再看本篇,食用效果最佳。索引假设给你一本非常厚的《Java编程思想》阅读,没有目录,你想快速找到某一个章节的知识点,那估计得找一会了,如果有目录就不一样。索引其实就是为了提高数据查询的效率,就像书的目录一样,对于数据库的表而言,索引其实就是它的目录。二叉搜索树索引的实现种类繁多,比如常见的有序数组、哈希表、树等,不同的结构都有自己的适用场景和局限性,在数据库领域转载 2022-03-31 11:16:46 · 95 阅读 · 0 评论 -
InnoDB原理篇:聊聊数据页变成索引这件事
前言大家好,我是阿星,真.好久不见。我们从上一篇文章【InnoDB 对 Buffer Pool 的奇思妙想】中得知,每个缓存页对应一个数据页。正好就以数据页为起点,来聊聊InnoDB的索引。数据页我们都知道平时执行crud的时候,都会从磁盘上加载数据页到Buffer Pool的缓存页里去,更新缓存页后,由异步线程刷回磁盘的数据页。所以MySQL进行数据操作的最小单位是数据页,接下来就分析分析,数据页到底长什么样。每个数据页默认16kb的大小,数据页由多个部分组成,如下图所转载 2022-03-31 11:15:16 · 90 阅读 · 0 评论 -
InnoDB对Buffer Pool的奇思妙想
前言大家好,我是阿星,又跟大家见面了。相信很多小伙伴在面试中都被问过「为什么要用缓存?」,大部分人都是回答:「减少数据库的磁盘IO压力」。但是MySQL真的有如此不堪吗?每次增删改查都要去走磁盘IO吗?今天就聊聊InnoDB对Buffer Pool的奇思妙想。Buffer Pool先梳理出问题,再思考如何解决问题。假设我们就是InnoDB,我们要如何去解决磁盘IO问题?这个简单,做缓存就好了,所以MySQL需要申请一块内存空间,这块内存空间称为Buffer Pool。转载 2022-03-31 10:49:26 · 95 阅读 · 0 评论 -
redo log和binlog之间的破事
前言阿星在前面两篇文章都详细聊过redo log与binlog,有兴趣的朋友可以去看看前面两篇文章: 聊聊redo log是什么? 你必须知道的binlog日志 今天就来聊聊InnoDB是如何保证redo log与binlog两份日志之间的逻辑一致。两阶段提交redo log(重做日志)让InnoDB存储引擎拥有了崩溃恢复能力。binlog(归档日志)保证了MySQL集群架构的数据一致性。虽然它们都属于持久化的保证,但是则重点不同。在执行更新语句过程,会记录.转载 2022-03-31 10:47:15 · 187 阅读 · 1 评论 -
还有人不知道binlog?
前言上篇阿星详细聊了redo log(重做日志),但是在MySQL数据库中还有一种二进制日志叫binlog(归档日志)。redo log它是物理日志,记录内容是“在某个数据页上做了什么修改”,属于InnoDB存储引擎。而binlog是逻辑日志,记录内容是语句的原始逻辑,类似于“给ID=2这一行的c字段加1”,属于MySQL Server层。binlog不管用什么存储引擎,只要发生了表数据更新,都会产生binlog日志。那binlog到底是用来干嘛的?可以说MySQL数据库的数转载 2022-03-31 10:45:34 · 222 阅读 · 0 评论 -
聊聊redo log是什么
前言说到MySQL,有两块日志一定绕不开,一个是InnoDB存储引擎的redo log(重做日志),另一个是MySQL Servce层的binlog(归档日志)。只要是数据更新操作,就一定会涉及它们,今天就来聊聊redo log(重做日志)。redo logredo log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。比如MySQL实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。上一篇中阿.转载 2022-03-31 10:42:37 · 300 阅读 · 0 评论 -
浅谈MySQL InnoDB的内存组件
前言MySQL中执行一条SQL语句,相应表数据的读写都是由存储引擎去做(更新数据、查询数据)。在这个过程,存储引擎需要决策一些事情 数据是从内存查还是从硬盘查 数据是更新在内存,还是硬盘 内存的数据什么时候同步到硬盘 所以存储引擎会按照内部逻辑与内存、硬盘交互。我们可以按需选择存储引擎,比如常见的InnoDB、MyISAM、Memory等等。众多存储引擎中,InnoDB是最为常用的,从MySQL5.5.8版本开始,InnoDB是默认的存储引擎。...转载 2022-03-31 10:23:05 · 114 阅读 · 0 评论 -
揭开MySQL面纱,显露架构
前言目前大部分的后端开发人员对MySQL的理解可能停留在一个黑盒子阶段。对MySQL基本使用没什么问题,比如建库、建表、建索引,执行各种增删改查。所有很多后端开发人员眼中的MySQL如下图所示导致在实际工作中碰到MySQL中死锁异常、SQL性能太差、异常报错等问题时,直接百度搜索。然后跟着博客捣鼓就解决了,可能自己都没搞明白里面的原理。为了解决这种知其然而不知其所以然的问题,阿星的重学MySQL系列会带着大家去探索MySQL底层原理的方方面面。这样大家碰到MySQL的一些异常转载 2022-03-31 10:19:01 · 90 阅读 · 0 评论 -
MySQL架构详解
首先声明本系列纯转载分享给大家共同学习,绝对的通俗易懂,看完之后直呼牛X!!!!揭开MySQL面纱,显露架构 浅谈MySQL InnoDB的内存组件 聊聊redo log是什么 还有人不知道binlog? redo log和binlog之间的破事 InnoDB对Buffer Pool的奇思妙想 InnoDB原理篇:聊聊数据页变成索引这件事 InnoDB原理篇:为什么使用索引会变快 InnoDB原理篇:如何用好索引 InnoDB原理篇:Change Buffer是如何提升索引性能的在此转载 2022-03-31 10:16:18 · 61 阅读 · 0 评论 -
MySQL字符串处理常用方法
1、在mybatis的Mapper.xml的sql语句中,不能直接用大于号、小于号要用转义字符如果用小于号会报错误如下:org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup。.原创 2020-07-10 13:12:50 · 636 阅读 · 0 评论 -
Oracle和MySQL时间格式化
MySQL:把时间类型格式化为字符串SELECT date_format(now(), '%Y-%m-%d %H:%i:%s') from table把字符串格式化为dateSTR_TO_DATE('1992-04-12','%Y-%m-%d')format样式整理:年:%Y显示四位 : 2015%y只显示...原创 2020-04-29 14:19:36 · 538 阅读 · 0 评论