首页 > 数据库 >常见面试题-MySQL软删除以及索引结构

常见面试题-MySQL软删除以及索引结构

时间:2023-11-20 19:32:56浏览次数:29  
标签:面试题 删除 MySQL 存储 索引 mysql 磁盘 数据

为什么 mysql 删了行记录,反而磁盘空间没有减少?

答:

在 mysql 中,当使用 delete 删除数据时,mysql 会将删除的数据标记为已删除,但是并不去磁盘上真正进行删除,而是在需要使用这片存储空间时,再将其从磁盘上清理掉,这是 MySQL 使用延迟清理的方式。

延迟清理的优点:

  • 如果 mysql 立即删除数据,会导致磁盘上产生大量的碎片,使用延迟清理可以减少磁盘碎片,提高磁盘的读写效率
  • 如果删除数据时立即清理磁盘上的数据,会消耗大量的性能。(如果一个大表存在索引,只删除其中一行,整个索引结构就会发生变化)

延迟清理的缺点:

  • 这些被标记为删除的数据,就是数据空洞,不仅浪费空间,还影响查询效率。
    mysql 是以数据页为单位来存储和读取数据,如果一个表有大量的数据空洞,那么 mysql 读取一个数据页,可能被标记删除的数据就占据了大量的空间,导致需要读取很多个数据页,影响查询效率

如何回收未使用空间:

optimize table 表名

索引的结构?

答:

索引是存储在引擎层而不是服务层,所以不同存储引擎的索引的工作方式也不同,我们只需要重点关注 InnoDB 存储引擎和 InnoDB 存储引擎中的索引实现,以下如果没有特殊说明,则都为 InnoDB 引擎。

mysql 支持两种索引结构: B-treeHASH

  • B-tree 索引

B-tree 索引结构使用 B+ 树来进行实现,结构如下图(粉色区域存放索引数据,白色区域存放下一级磁盘文件地址):

常见面试题-MySQL软删除以及索引结构_mysql

B-tree 索引(B+ 树实现)的一些特点:

  • B+ 树叶子节点之间按索引数据的大小顺序建立了双向链表指针,适合按照范围查找
  • 使用 B+ 树非叶子节点只存储索引,在 B 树中,每个节点的索引和数据都在一起,因此使用 B+ 树时,通过一次磁盘 IO 拿到相同大小的存储页,B+ 树可以比 B 树拿到的索引更多,因此减少了磁盘 IO 的次数。
  • B+ 树查询性能更稳定,因为数据只保存在叶子节点,每次查询数据,磁盘 IO 的次数是稳定的

标签:面试题,删除,MySQL,存储,索引,mysql,磁盘,数据
From: https://blog.51cto.com/u_16186397/8491232

相关文章

  • MySQL - Transaction Isolation Level
     zzh@ZZHPC:~$dockerrun--namemysql8-p3306:3306-eMYSQL_ROOT_PASSWORD=aaa-eMYSQL_DATABASE=simple_bank-dmysqlac3cce2a639d2379500723acbd9149aa4f92d1d76c8c7b0c3abcc0b382b311afzzh@ZZHPC:~$dockerexec-itmysql8mysql-uroot-paaasimple_bankmys......
  • pandas索引切片
    行 列 ......
  • 索引切片
    行:列: ......
  • chrome:在url中指定搜索引擎
    1、浏览器设置里面找到搜索引擎,添加网站搜索,点击添加默认搜索就会添加到搜索引擎中2、然后在url中输入快捷词+空格,然后在输入要搜索的内容即可 ......
  • mysql 安全相关
    密码复杂度安装validate_password插件,开启密码校验相关配置1.检查是否已安装该插件SELECTPLUGIN_NAME,PLUGIN_STATUSFROMINFORMATION_SCHEMA.PLUGINSWHEREPLUGIN_NAME='validate_password';2.安装插件installpluginvalidate_passwordSONAME'validate_password.d......
  • mysql自定义函数
    自定义函数在MySQL中,您可以使用自定义函数来扩展数据库管理系统的功能。自定义函数允许您封装一段可重用的代码,并在查询和其他操作中调用它。以下是在MySQL中创建和使用自定义函数的一般步骤:1、创建自定义函数语法:CREATEFUNCTIONfunction_name(parameters)RETURNSreturn_t......
  • mysql 登录错误次数
    如果连续5次输入密码错误,限制登录数据库10分钟1.安装插件(CONNECTION_CONTROL和CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS)installpluginCONNECTION_CONTROLsoname'connection_control.dll'installpluginCONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTSsoname'connection_con......
  • MySQL Select 语句执行顺序
    一条SQL查询语句结构如下:SELECTDISTINCT<select_list>FROM<left_table><join_type>JOIN<right_table>ON<join_condition>WHERE<where_condition>GROUPBY<group_by_list>HAVING<having_condition>ORDERBY<or......
  • idea连接mysql数据库
    关于配置环境的崩溃心理历程:(我哭)跟着黑马连接本地数据库的时候,测试连接显示不成功启动命令行,在命令行输入:mysql-uroot-p****最后给我返回的是:ERROR2003(HY000):Can'tconnecttoMySQLserveron'localhost:3306'(10061)  问了gpt,现在来看他给出的回答是正确的,......
  • MySQL安装
    注:下面的操作都是Windows下进行下载地址:https://dev.mysql.com/downloads/mysql/1.官网下载2、针对操作系统的不同下载不同的版本 3.解压4.添加环境变量在文件夹中找到mysql.exe文件复制路径到path中5.初始化mysqld--initialize-insecure6.启动sql服务mysqld......