MySQL InnoDB事务隔离和并发控制面试题详解

1. 为什么 MySQL 使用 B+ 树作为索引而不是 B 树?

MySQL 选择使用 B+ 树作为索引主要有以下几个原因:

  1. 减少 IO 次数,提高效率:B+ 树的所有数据都存储在叶子节点,非叶子节点只存储索引,树的高度较低,因此查找路径较短,减少了磁盘 IO 次数。
  2. 查询效率更加稳定:由于数据仅存储在叶子节点,所有查询都必须访问叶子节点,这使得查询时间更加稳定。
  3. 提高范围查询效率:B+ 树的叶子节点通过指针链接在一起,形成一个有序链表,这使得范围查询非常高效,只需一次遍历即可完成。
  4. 顺序读写:B+ 树叶子节点顺序存储数据,充分利用了磁盘的顺序读写性能,提高了整体读写效率。

2. 磁盘的顺序读和随机读有什么区别?

磁盘结构及 IO 操作

磁盘由盘片、磁头、主轴和控制电路集成板组成。一次 IO 操作包括以下步骤:

  • 寻道时间:磁头移动到目标磁道所需的时间。
  • 旋转延迟:目标磁道旋转到磁头下方所需的时间。
  • 数据传输时间:从磁盘读取数据并传输到内存的时间。
顺序读与随机读
  • 顺序读:磁头读取相邻扇区的数据,几乎不需要移动磁头,旋转延迟和寻道时间很短,读写速度快。
  • 随机读:磁头在不同位置之间跳跃读取数据,频繁移动磁头和等待旋转,导致较高的寻道时间和旋转延迟,读写速度慢。
顺序 IO 与并发 IO
  • 顺序 IO:单个磁盘一次只能处理一个 IO 指令,适合顺序读写。
  • 并发 IO:多个磁盘组成的磁盘阵列(如 RAID)可以并行处理多个 IO 操作,提高了整体读写性能。

3. 什么是 Hash 索引?

Hash 索引是一种基于 Hash 表的数据结构,用于快速查找数据。其原理是通过哈希函数将键映射到哈希表的某个位置,然后直接访问该位置的数据。优点是查找速度非常快,缺点是无法进行范围查询和顺序访问。
在这里插入图片描述

4. 索引使用原则

列的离散度

列的离散度是指列的不同值的数量与总行数的比例。离散度越高,索引效果越好。公式如下:

count(distinct(column_name)) : count(*)
联合索引最左匹配

联合索引按列顺序从左到右建立搜索树。例如,联合索引 (name, phone),在查询时必须包含 name 才能使用索引。当 name 相等时

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的小熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值