《剑指JAVA面试—offer直通车》—MySQL数据库篇

本文深入探讨了MySQL数据库的架构、索引原理与优化、数据库锁机制以及事务的四大特性。分析了不同类型的索引,如二叉树、B-Tree和B+Tree,并讨论了索引的优缺点。解释了InnoDB与MyISAM的锁区别,强调了事务隔离级别的概念,并举例说明了如何避免并发问题。此外,还介绍了快照读和当前读的概念,以及InnoDB如何通过next-key锁实现非阻塞读。
摘要由CSDN通过智能技术生成

1、架构

在这里插入图片描述

存储模块、缓存机制、SQL解析、日志管理、权限划分、容灾机制、索引管理锁管理

2、索引

  • 为什么要用索引?

    答:通常在数据查询中,我们要避免全表扫描,但这并不意味着全表扫描的速度就慢,也要分情况,如果数据量少的情况,我们就可以一次性全表扫描将其全部取出并丢进缓存,但如果数据量大,全表扫描就会变得特别慢,从而影响程序整体的响应效率,为此,在数据量的情况下,我们尽可能会采用索引来优化查询,就跟字典中的部首与拼音一般为我们提升查询效率。

  • 什么样的信息能称为索引?

    答:能将记录限定在一定范围内的关键信息,如主键、唯一键、普通键或多种信息组合成的组合键等。

  • 索引的数据结构?

    • 二叉树

在这里插入图片描述

优点:查找速度快,可类比二分查找

缺点:若插入数据的顺序与数值依次递增,会导致二叉树成线性排列,失去二分查找的优点,从而导致查询效率下降

在这里插入图片描述

  • B-Tree
    在这里插入图片描述

每个存储块中,包含了关键字与指向孩子结点的指针,根节点至少包括两个孩子,且树中的每个节点最多含有m(m>=2)个孩子,除根节点与叶节点外,其他每个节点至少有ceil(m/2)个孩子(ceil函数表示向上取整),所有叶子结点都位于同一层,假设每个非终端节点中有n个关键字信息,其中关键字按照升序排序,关键字的个数n满足n<=m-1,即关键字个数至少比孩子指针的个数少1,最后关键字所指向的孩子结点个关键字必须小于该关键字

  • B+Tree

在这里插入图片描述

- 非叶子结点的子树指针与关键字个数相同
- 非叶子结点的子树指针**P[i]**,指向关键字值**[K[i],K[i+1])**的子树
- 非叶子结点仅用来索引,数据都保存在叶子节点中
- 所有叶子节点均有一个链指针指向下一个叶子结点以加快查询速率

至此B+Tree的优点就很明显了,因为其文件内部只存放关键字数据,所以其占用的内存更少&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值