![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
文章平均质量分 96
光看不点赞
这个作者很懒,什么都没留下…
展开
-
MySQL是怎样运行的:从根儿上理解MySQL | 查询优化器(二):基于规则的优化
也就是说:在这种情况下:外连接和内连接也就没有什么区别了。原创 2022-09-14 17:22:56 · 2646 阅读 · 1 评论 -
MySQL是怎样运行的:从根儿上理解MySQL | B+树索引以及索引优化
概述我们知道聚簇索引的那棵 B+ 树的叶子节点中已经把所有完整的用户记录都包含了,而 MyISAM 的索引方案虽然也使用树形结构,但是却将索引和数据分开存储将表中的记录按照记录的插入顺序单独存储在一个文件中,称之为数据文件。这个文件并不划分为若干个数据页,有多少记录就往这个文件中塞多少记录就成了。我们可以通过行号而快速访问到一条记录。我们就以上面的表为例子,里面随便插点数据看看结构,可以看没有按照之间的顺序所以二分查找也是空谈使用 MyISAM 存储引擎的表会把索引信息另外存储到一个称为索引文件。原创 2022-09-06 12:10:11 · 2575 阅读 · 0 评论 -
MySQL是怎样运行的:从根儿上理解MySQL | 查询优化器(一):单表查询方法、基于成本的优化
概述I/O成本:将数据和索引从磁盘中加载到内存的过程称为IO成本CPU成本:读取以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作损耗的时间称之为 CPU 成本。成本常数规定读取一个页面花费的成本默认是 1.0读取以及检测一条记录是否符合搜索条件的成本默认是 0.2。概述单次查询驱动表的成本多次查询被驱动表的成本(具体查询多少次取决于对驱动表查询的结果集中有多少条记录)扇出我们把对驱动表进行查询后得到的记录条数称之为驱动表的 扇出(英文名: fanout )。原创 2022-09-02 12:20:05 · 2542 阅读 · 0 评论 -
关于极客时间 | MySQL实战45讲的部分总结
MySQL为什么有时候会选错索引1.MySQL选择索引的依据概述mysql选择索引无非就是优化器觉得哪一种索引的成本执行低,优化器会从该索引的扫描行数、是否会用到临时表及是否要进行排序来进行综合判断1.1 基于主键的成本计算概述对于主键来说就是计算全表扫描的成本,取决于下面两个方面聚簇索引占用的页面数该表中的记录数该表中的记录数对于这个数据的获取,mysql使用的是统计数据中的估计值,每个表都会有一些列的统计信息,本选项表示表中的记录条数。对于使用 MyISAM原创 2022-06-24 16:57:43 · 1493 阅读 · 0 评论 -
MySQL是怎样运行的:从根儿上理解MySQL | 锁
文章目录前言:本博文是对MySQL是怎样运行的:从根儿上理解MySQL这本书的归纳和总结第25章 工作面试老大难-锁1.解决并发事务带来问题的两种基本方式1.1 并发事务访问相同记录的情况的三种情况前言:本博文是对MySQL是怎样运行的:从根儿上理解MySQL这本书的归纳和总结第25章 工作面试老大难-锁1.解决并发事务带来问题的两种基本方式1.1 并发事务访问相同记录的情况的三种情况...原创 2022-03-30 23:40:07 · 5594 阅读 · 0 评论 -
MySQL是怎样运行的:从根儿上理解MySQL | 一条记录的多幅面孔-事务的隔离级别与 MVCC
文章目录前言:本博文是对MySQL是怎样运行的:从根儿上理解MySQL这本书的归纳和总结第24章 一条记录的多幅面孔-事务的隔离级别与 MVCC1.事前准备2.事务隔离级别2.1 事务并发执行遇到的问题2.2 SQL标准中的四种隔离级别2.3 MySQL中支持的四种事务隔离级别2.3.1 如何设置事务的隔离级别3. MVCC原理3.1 版本链3.1.1 回顾两个必要隐藏列(`trx_id、roll_pointer`)3.1.2 通过更新操作引入版本链3.2 ReadView3.2.1 判断记录某个版本是否可原创 2022-03-28 22:43:03 · 1132 阅读 · 0 评论 -
MySQL是怎样运行的:从根儿上理解MySQL | undo日志(下)
文章目录前言:本博文是对MySQL是怎样运行的:从根儿上理解MySQL这本书的归纳和总结23.后悔了怎么办-undo日志(下)1.通用链表结构2.FIL_PAGE_UNDO_LOG页面3.Undo页面链表3.1 单个事务中的undo页面链表3.2 多个事务中的Undo页面链表前言:本博文是对MySQL是怎样运行的:从根儿上理解MySQL这本书的归纳和总结23.后悔了怎么办-undo日志(下)1.通用链表结构概述在写入undo日志的时候会使用到多个链表,每个链表都有相同的节点结构如下图:前面说原创 2022-03-26 23:22:41 · 1899 阅读 · 0 评论 -
MySQL是怎样运行的:从根儿上理解MySQL | undo日志(上)
文章目录前言:本博文是对MySQL是怎样运行的:从根儿上理解MySQL这本书的归纳和总结22.后悔了怎么办-undo日志(上)22.1 事务回滚的需求前言:本博文是对MySQL是怎样运行的:从根儿上理解MySQL这本书的归纳和总结22.后悔了怎么办-undo日志(上)22.1 事务回滚的需求概述事务是需要保证原子性的,也就是要么成功要么失败没有中间态,所以出现中途失败没有保证原子性的情况比如:事务执行过程中可能遇到各种错误,比如服务器本身的错误,操作系统错误,甚至是突然断电导致的错误。原创 2022-03-23 22:13:11 · 1811 阅读 · 0 评论 -
MySQL是怎样运行的:从根儿上理解MySQL | redo日志(下)
21.redo日志(下)1.redo日志文件1.1 redo日志刷盘时机概述前面说过redo日志以mtr的形式存放在pool中,但这些数据不能一直待在内存里面啊,我们需要把这些数据持久化到磁盘中去,以下几种情况会引发持久化即刷新log buffer 空间不足时前面说到log buffer的容量是16MB,很快就会被填满,所以mysql规定当redo日志所占的大小超过了pool的一半左右时,就需要把这些日志刷新到磁盘上事务提交时我们前边说过之所以使用 redo日志主要是因原创 2022-03-21 22:17:43 · 1328 阅读 · 0 评论 -
MySQL是怎样运行的:从根儿上理解MySQL | redo日志(上)
20.redo日志(上)1.redo日志是个啥1.1 回忆回忆前情回顾前面我们又说到,存储引擎修改数据的基本单位是以页来完成的,所以我们进行增删改查时就是在对页面进行读、写、创建页面。学习完缓冲池以后我们知道进行这些操作的时候需要把磁盘页缓存到缓冲池才可以,这时问题出现了,我们各式各样的一通操作过后只是修改了缓存页的信息啊,信息始终没有做到百分百持久化,如果突然出现断电或者服务器故障又或者是提交错误直接崩溃等。那么我们应该怎么做这个持久化呢,最简单粗暴的方法就是完成任务之前把该事务所修改的页面原创 2022-03-20 22:09:37 · 2254 阅读 · 0 评论 -
MySQL是怎样运行的:从根儿上理解MySQL|MySql事务简介
19.从猫爷被杀说起-事务简介1.事务的起源这里书中讲述的十分生动有趣,大家可自行下载pdf查阅理解;总结来说所谓事务就是:让某些数据库操作符合现实世界中状态转换的规则1.1 原子性(Atomicity)概述现实世界中转账操作是一个不可分割的操作,也就是说要么压根儿就没转,要么转账成功,不能存在中间的状态,也就是转了一半的这种情况。设计数据库的大叔们把这种要么全做,要么全不做的规则称之为 原子性,但麻烦就麻烦在现实生活中一步的操作要在数据库分为好几步来实现,其中一环断开则会引发意想不到的原创 2022-03-17 22:36:38 · 3032 阅读 · 0 评论 -
MySQL是怎样运行的:从根儿上理解MySQL|调节磁盘和CPU的矛盾-InnoDB的Buffer Pool
18.调节磁盘和CPU的矛盾-InnoDB的Buffer Pool1.缓存的重要性概述InnoDB 存储引擎在处理客户端的请求时,当需要访问某个页的数据时,就会把完整的页的数据全部加载到内存中,也就是说即使我们只需要访问一个页的一条记录,那也需要先把整个页的数据加载到内存中。将整个页加载到内存中后就可以进行读写访问了,在进行完读写访问之后并不着急把该页对应的内存空间释放掉,而是将其 缓存 起来,这样将来有请求再次访问该页面时,就可以省去磁盘 IO 的开销了。...原创 2022-03-15 22:57:37 · 2290 阅读 · 5 评论