
MySQL
文章平均质量分 90
XP-Code
这个作者很懒,什么都没留下…
展开
-
人肉索引优化器
一文搞懂explain中extra的提示原创 2022-10-13 22:10:09 · 349 阅读 · 0 评论 -
MySQL中JOIN关键字原理
一、JOIN 简介JOIN 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。例如我们可以通过JOIN来从用户表和订单表两个表中获取数据:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN OrdersON Persons.Id_P = Orders.Id_PORDER BY Persons.LastNameJOIN类型分为以下几种:JOIN: 如果表中有至少一个匹配,则原创 2021-04-13 13:35:53 · 319 阅读 · 0 评论 -
InnoDB中B+树索引的具体实现
一、数据页的存储结构磁盘数据文件虽然不是一个数据页对应一个文件,但是数据页之间是通过指针联系的,同时数据页内部的行数据也通过指针关联。其实一个数据页在磁盘文件里就是一段有组织的数据。每个数据页都有两个指针,一个指向前一个数据页的物理地址,一个指向后一个数据页的物理地址。数据页内部的每一行数据都会按照主键大小进行排序存储,同时每一行数据都有一个指向下一行数据位置的指针。此外,每个数据页都有一个页目录,里面保存的是每个记录的主键和所在的数据页地址的映射关系。如下图所示:这样我们每次寻找一条数据的时候,原创 2021-04-09 17:33:51 · 351 阅读 · 0 评论 -
MySQL 在磁盘上如何存储数据的
一、一行记录的格式首先介绍“行格式”这个概念,我们可以通过行格式来指定表的行存储的格式是什么样的。常见的行式有以下4种:(1)REDUNDANT(2)COMPACT(3)DYNAMIC(4)COMPRESSED各种表格式的特点及缺点:以COMPACT为例,在这种格式下,每一行数据在实际存储时,打给的格式类似于下面这样:变长字段的长度列表,null值列表,数据头,column01的值,column02的值,…,column0n的值注意实际存储的时候没有逗号分隔,这里只是为了方便说明。1.原创 2021-04-09 12:54:36 · 917 阅读 · 0 评论 -
InnoDB 中的内存结构:缓冲池(Buffer Pool)
我们在对数据库进行增删改操作的时候是不可能直接对磁盘文件上的数据进行操作的,因为一个大磁盘文件的随机读写操作可能都要几百毫秒,那么数据库每秒也就只能处理几百个请求了。所以很自然的就要引入缓存的概念,MySQL的InnoDB存储引擎中就是使用Buffer Pool来实现数据的缓存,增删改的时候先将数据加载到Buffer Pool中,然后配合undo log、redo log以及binlog来保证数据的正常更新。那么Buffer Pool中的保存的数据结构到底是什么样的,我们一起来看看。1. 如何配置Bu原创 2021-04-08 23:08:26 · 602 阅读 · 0 评论 -
MySQL中一条更新语句的执行过程
首先假设有这么一条SQL更新语句:update users set name='xxx' where id = 10这个语句是如何执行的呢?首先就是我们的客户端通过一个数据库连接将语句发送到MySQL上,然后经过SQL接口,解析器,优化器,执行器几个环节,解析SQL语句,生成执行计划,接着由执行器调用InnoDB存储引擎的接口去实际执行,然后返回结果给客户端。1. 查询数据更新语句的第一步就是查询到对应记录。所以首先就是要查询 “id=10” 的记录。InnoDB在查询的时候会先从缓冲池(Buf原创 2021-04-08 20:18:54 · 583 阅读 · 0 评论