首页 > 数据库 >MySQL InnoDB事务隔离和并发控制面试题详解

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

时间:2024-07-22 10:28:02浏览次数:14  
标签:面试题 顺序 读写 索引 InnoDB 磁头 IO MySQL 磁盘

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 相等时

标签:面试题,顺序,读写,索引,InnoDB,磁头,IO,MySQL,磁盘
From: https://blog.csdn.net/qq_26893655/article/details/140574737

相关文章

  • MySQL事务管理详解:特性、问题与解决方案
    什么是事务?事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。事务的四大特性原子性(Atomicity)原子性意味着事务中对数据库的一系列操作要......
  • MySQL体系结构与查询执行流程详解
    MySQL体系结构与查询执行过程详解MySQL是一个采用单进程多线程架构模式的关系型数据库管理系统。本文将详细介绍MySQL的体系结构及其查询语句的执行过程,并探讨性能优化的关键点。MySQL体系结构MySQL的架构为Client-Server架构。总体上,我们可以将MySQL的体系结......
  • Java基础面试题大全 -001
    1、Java语言有哪些特点1、简单易学、有丰富的类库2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)3、与平台无关性(JVM是Java跨平台使用的根本)4、可靠安全5、支持多线程6、java生态完善2、面向对象和面向过程的区别面向过程:是分析解决问题的步骤,然后用函数......
  • MySQL 数据导出导入 脚本定时执行
    crontab安装yuminstall-ycrontab定时执行#添加定时任务crontab-e#编辑文件:每天早上6点执行06***sh/data1/mysql/backup/restore.sh#查看定时任务crontab-l全量导出脚本#!/bin/bashdata_dir="/data1/mysql/backup"if[!-d$data_dir];thenmkdi......
  • mysql-connector不会导入到pycharm中的脚本中
    我已经使用pip成功安装了mysql-connector。Installingcollectedpackages:mysql-connectorRunningsetup.pyinstallformysql-connector...doneSuccessfullyinstalledmysql-connector-2.1.6但是,在PyCharm中,当我有一个使用以下行的脚本时:importmysql-conn......
  • Mysql之一次完成的sql执行过程
    Mysql一次完成的sql执行过程是什么1、客户端请求客户端通过MySQL协议发送SQL查询或事务到服务器。2、连接处理MySQL服务器为每个客户端连接创建一个线程,该线程处理来自客户端的所有请求。3、SQL解析服务器首先解析SQL语句,检查语法正确性。4、查询优化解析器生成一个或多个......
  • 代码随想录训练营 Day4打卡 链表part02 24. 两两交换链表中的节点 19.删除链表的倒数
    代码随想录训练营Day4打卡链表part02一、力扣24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]算法思路:引入虚......
  • MySQL入门学习-SQL高级技巧.透视表
        在MySQL中,虽然没有直接提供像Excel中那样的透视表功能,但可以通过一些技巧来实现类似的效果。通常,我们可以使用聚合函数和'GROUPBY' 子句来创建数据的透视表。一、透视表的概念:    透视表是一种数据汇总和分析的工具,它可以将数据按照不同的维度进行......
  • MySQL入门学习-SQL高级技巧.Window Function
        在MySQL中,窗口函数(WindowFunction)是一种强大的分析工具,它可以在查询结果的基础上进行更复杂的计算和分析。一、窗口函数的概念:    窗口函数可以对查询结果的每一行数据,根据指定的分区(Partition)和排序规则(Order)进行计算。它可以在同一查询中同时返回基础......
  • MySQL执行状态查看与分析
     当mysql出现性能问题时,一般会查看mysql的执行状态,执行命令:showprocesslist各列的含义列名含义id一个标识,你要kill一个语句的时候使用,例如 mysql>kill207user显示当前用户,如果不是root,这个命令就只显示你权限范围内的sql语句host显示这个语句是从哪个ip的哪个端口上......