Mysql:常见问题

35 篇文章 10 订阅 ¥19.90 ¥99.00
本文深入探讨MySQL的缓存机制,包括查询缓存与缓冲池的区别,以及为什么表数据删掉一半表文件大小不变的原因。同时,分析了为何选择B+Tree作为索引数据结构,强调自增ID做主键的优势,并解析数据写入后的最终落盘过程。通过对这些关键概念的理解,有助于优化数据库性能。
摘要由CSDN通过智能技术生成

一、查询缓存和缓冲池

1、缓冲池

  • 用于加速数据的修改和访问,通过将热点数据缓存在内存,最大限度的减少磁盘I/O
  • 默认大小为128M,Buffer Pool中数据以页为存储单位,其实现的数据结构是以页为单位的单链表
  • 由于内存的空间限制,Buffer Pool仅能容纳最热点的数据
  • Buffer Pool使用LRU算法淘汰非热点数据页

2、查询缓存和缓冲池的区别

  • 查询缓存是把缓存结果缓存起来,也就意味着只有相同的查询操作才会命中查询缓存,而且更新操作就会破坏缓存,因此Mysql的查询缓存命中率不高,在Mysql8.0中已经弃用了查询缓存
  • 缓冲池的作用是把数据页放到缓冲池中,这样在读取或修改数据的时候可以更新或者查找缓冲池中的数据,数据页中包含了很多行数据,即使这次没用到,下次也可能会用到
  • 缓冲池并不等于查询缓存,它们都是通过缓存的机制来提升效率,但缓冲池服务于数据库整体的I/O操作,而查询缓存服务于Sql查询和查询结果集的,因为命中条件苛刻,只要数据表发生变化,查询缓存就会失效

二、为什么表数据删掉一半,表文件大小不变?

1、innodb_file_per_table

  • on:每个InnoDB表数据存储在一个以.ibd为后缀的文件中
  • off:表的数据放在系统共享表空间,也就是跟数据字典放在一起
  • 建议将这个值设置为on,因为,一个表单独存储一个文件更容易管理,而且不需要这个表的时候,通过drop table命令,系统就会直接删除这个文件;而如果是放在共享表空间中,即使表删掉了,空间也是不会回收的

2、delete删表

  • Innodb只会把删除的数据标记为删除,磁盘文件的大小并不会缩小,如果之后要在这个位置再插入记录,这个记录可能会被复用
  • Innodb的数据是按页存储的,如果删掉了一个数据页的所有记录,整个数据页就可以被复用
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我爱夜来香A

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

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

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

打赏作者

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

抵扣说明:

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

余额充值