![](https://img-blog.csdnimg.cn/eda297a2f6204e5694309623056a5a63.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL专栏
文章平均质量分 96
MySQL专栏
秋天的一亩三分地
学无止境
展开
-
关于InnoDB底层原理与MySQL日志机制
若数据库之前没有备份,但所有的 binlog 日志都在,此时只需从 binlog 第一个文件开始逐个恢复每个 binlog 文件里的数据即可,但这种过于理想化,因为 binlog 日志比较大,早期的 binlog 文件一般会定期删除,因此很难依靠 binlog 文件来恢复整个数据库。主要包括连接器、查询缓存、词法分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,例如存储过程、触发器、视图等。原创 2023-06-26 00:38:27 · 415 阅读 · 0 评论 -
关于MySQL事务原理与优化
数据库一般都会并发执行多个事务,多个事务可能会并发地对相同的一批数据进行增删改查操作,由此则引发脏写、脏读、不可重复读、幻读等问题。这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事务隔离机制、锁机制、MVCC 多版本并发控制隔离机制、日志机制,用一整套机制来解决多事务并发问题。原创 2023-05-17 01:18:02 · 197 阅读 · 0 评论 -
关于MySQL锁机制与优化实践与MVCC底层原理
因为在 RR 隔离级别下,需要解决不可重复读和幻读问题,所以在遍历扫描聚集索引记录时,为了防止扫描过的索引被其他事务修改(不可重复读问题) 或间隙被其他事务插入记录(幻读问题),从而导致数据不一致,所以 MySQL 的解决方案就是将所有扫描过的索引记录和间隙都上锁,但此时并不是直接将整张表加表锁,因为不一定能加上表锁,可能会有其他事务锁住了表里的其他行记录。假设未提交的事务 id 有 100 和 100,此时未提交事务的 id 数组即为 [100, 200],还存在一个已提交的事务 id 为 300;原创 2023-05-23 23:59:26 · 260 阅读 · 0 评论 -
关于MySQL索引优化实战
1、MySQL 支持两种方式的排序 filesort 和 index,Using index 是指 MySQL 扫描索引本身完成排序。index 效率高,filesort 效率低。2、order by 满足两种情况会使用 Using index。1) order by 语句使用索引最左前缀法则。2) 使用 where 子句与 order by 子句条件列组合满足索引最左前缀法则。3、尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。原创 2023-05-14 18:24:04 · 442 阅读 · 0 评论 -
关于Explain详解与索引实践
1)id列:id 列的编号是 select 的序列号,有几个 select 就有几个 id,且 id 的顺序是按 select 出现的顺序增长的。id 列越大执行优先级越高,id 相同则从上往下执行,id 为 NULL 则最后执行。2)select_type列:select_type 表示对应行是简单还是复杂的查询。3)table列:表示explain的一行正在访问哪个表。当 from 子句中有子查询时,table列是 格式,表示当前查询依赖id=N的查询,所以会先执行id=N的查询。原创 2023-05-05 21:41:23 · 1667 阅读 · 0 评论 -
关于MySQL索引底层数据结构与算法
0x56为Alice对应的磁盘文件地址,例如查询name为Alice时,会先通过hash运算得到结果桶2,再去遍历桶2的链表,最终查询到Alice,包括所对应的磁盘文件地址。根据最左前缀原则,若比较大小会看比较name,若相等,则比较age,若再相等,则比较position,再根据叶子节点存储的主键进行回表查找对应的主键数据。③若不使用自增主键,则在加入新的数据时,可能会多次将数据插入到前面已经放满索引元素的节点,使其进行分裂调整,甚至会导致整棵树重新进行平衡,极大降低效率。实现了自平衡的二叉排序树。原创 2022-11-29 23:26:42 · 700 阅读 · 2 评论