![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 68
不平衡的叉叉树
I'm nobody, but I want to be somebody.
展开
-
MySQL为什么要改进LRU算法?
LRU = Least Recently Used(最近最少使用):也就是末尾淘汰法,新数据从链表头部加入,释放空间时从末尾淘汰数据。1.当要访问某个页时,如果不在Buffer Pool中,需要把该页加载到缓冲池,并且把该缓冲页对应的控制块作为节点添加到LRU链表的头部。2.当要访问某个页时,如果在Buffer Pool中,则直接把该页对应的控制块移动到LRU链表的头部。3.当需要释放空间时,直接从末尾淘汰。原创 2023-02-09 14:13:41 · 612 阅读 · 0 评论 -
为什么写缓冲区仅适用于非唯一普通索引页?
change Buffer:写缓冲区,是针对二级索引(辅助索引)页的更新优化措施。作用:在进行DML操作时,如果请求的辅助索引(二级索引)没有在缓冲池中时,并不会立刻将磁盘页加载到缓冲池,而是在change Buffer中记录缓冲变更,等未来数据被读取时,再从磁盘中读取旧数据并与change Buffer中对应数据进行合并恢复到Buffer Pool中。change Buffer更新流程如下。原创 2023-02-09 13:30:26 · 346 阅读 · 1 评论 -
面试官问我为啥B+树一般都不超过3层?3层B+树能存多少数据?redo log与binlog的两阶段提交?
我今天逛了一下CSDN,又发现了一条显眼的数据,大概是说3层B+树足以容纳2000w条数据。我当时就蒙了,3层对2000w,心想这B+树也太厉害了吧,由此勾起了我求知的欲望,我一定要搞明白他这2000w是怎么来的。B+树结构关于B+树的结构,我在之前的文章有讲过,在这里就不细说了,简而言之,B+树的分支非常多,而且每个非叶子节点只存主键值(主键索引)和指针,数据存在于叶子节点。也就是说,磁盘的IO次数与树的高度是相同的。3层B+树可以存多少数据?进入正题,前面说了,3层B+树大概可以存2原创 2022-09-20 21:24:55 · 7314 阅读 · 5 评论 -
什么是幻读?以及如何解决幻读?
幻读与不可重复读的区别什么是不可重复读?不可重复读是在读已提交的隔离级别下,对同一个事务先后执行相同的查询操作,但是两次的查询结果却不一致。这是因为在执行两次查询操作的过程中,另一个事务更新了数据库数据并已提交。这种情况其实是允许的,毕竟要以数据库最新的数据为准。将隔离级别设置为可重复读能够解决不可重复读问题。什么是幻读?对幻读产生条件的说明:1、在可重复读隔离级别下,普通的查询都是快照读,是查询不到别的事务新插入的数据,所以幻读是在当前读下才会出现。2、幻读仅专指“新插入的行”。原创 2022-08-15 22:35:47 · 2208 阅读 · 0 评论 -
面试官:你是如何保障MySQL数据库与Redis缓存的数据一致性?
什么是数据库与缓存的一致性?数据一致性?数据一致性是值:1)缓存中存有数据,并且该数据在缓存中的数据值=数据库中的数据值。2)缓存中没有该数据,那么数据库中的值=最新值。为什么会有一致性问题?在我们把Redis作为缓存的时候,如果数据需要更改,我们就得经过双写来保证缓存与数据库的数据一致性。如果要保证强一致性的话,势必要引入2PC等分布式一致性协议,或者引入分布式锁等技术,但是这肯定也会对性能有影响,这也违背了我们使用Redis缓存的目的 -- 提高性能。所以我们现在谈的数据原创 2022-08-24 16:28:49 · 413 阅读 · 4 评论 -
MySQL场景面试,你是如何进行SQL优化的?
在面试的时候,极有可能会问到SQL优化相关的问题,下面模拟一下面试场景。面试官:你们平时是怎么来优化SQL的?答:关于SQL的优化,我主要从以下4个方面考虑。1、表结构优化表结构的优化包括给字段设计合适的类型、尽可能使用varchar代替char、取消无效索引。给字段设计合适的数据类型:也就是尽量使用数字型字段。比如某个字段只含数字信息,那么就不要将该字段设置为字符类型,因为这样会降低查询和连接的性能,也会增加存储开销。因为存储引擎在进行查询和连接时会逐个比较字符串中的每一个字符,而对于原创 2022-08-23 10:29:47 · 453 阅读 · 0 评论 -
MySQL默认隔离级别是RR,但是为什么一些大厂会改成RC?
为什么默认隔离级别是RR?可能大部分人都只知道MySQL的隔离级别有4个,分别是RU读未提交、RC读已提交、RR可重复读和Serializable可串行化,很少有人知道MySQL默认的隔离级别是RR,Oracle默认的隔离级别是RC。那就更少有人知道为什么MySQL默认的隔离级别是RR了。我也是刚刚工作之余看到了一篇文章,里面简单提了一下这个问题,我就四处找寻了一下答案,将自己所理解的记录下来,希望对大家有帮助。理解脏读、不可重复读、幻读脏读:某个事务对一份数据执行了更新操作,另一个事务在此时读原创 2022-05-07 15:00:46 · 2224 阅读 · 0 评论 -
MySQL存储引擎、InnoDB与MyISAM区别、B Tree与B+Tree
InnoDB存储引擎有2个文件:Frm文件和Ibd文件。Frm文件是表的定义文件,而Ibd文件是数据和索引存储文件(数据以主键进行聚集索引,把真正的数据保存在叶子节点中)。MyISAM存储引擎有3个文件:Frm文件、MYD文件和MYI文件。Frm文件是表的定义文件,MYD文件是数据文件(所有的数据保存在这个文件中),MYI文件是索引文件。原创 2022-03-10 20:27:53 · 2344 阅读 · 1 评论 -
事务的隔离级别,4大隔离级别详解
隔离级别分类事务的隔离级别分为以下4类:读未提交 读已提交 可重复度 串行化事务的并发问题脏读:一个事务读到了另一个事务还未提交的update数据,导致多次查询的结果不一样 不可重复读:一个事务读到了另一个事务已经提交的update数据,导致多次查询结果不一致 幻读:一个事务读到了另一个事务已经提交的insert数据,导致多次查询的结果不一样幻读详解:幻读是只在重复度的隔离级别下,A事务执行过程中,B事务执行,并插入新的数据,提交事务。如果此时A事务直接进行select原创 2021-10-11 09:35:30 · 2987 阅读 · 0 评论