网站权限怎么弄,网页制作师就业班,昆明网站建设公司推荐,上海开展扫黄打非专项检查为什么 mysql 删了行记录#xff0c;反而磁盘空间没有减少#xff1f;
答#xff1a;
在 mysql 中#xff0c;当使用 delete 删除数据时#xff0c;mysql 会将删除的数据标记为已删除#xff0c;但是并不去磁盘上真正进行删除#xff0c;而是在需要使用这片存储空间时…为什么 mysql 删了行记录反而磁盘空间没有减少
答
在 mysql 中当使用 delete 删除数据时mysql 会将删除的数据标记为已删除但是并不去磁盘上真正进行删除而是在需要使用这片存储空间时再将其从磁盘上清理掉这是 MySQL 使用延迟清理的方式。
延迟清理的优点
如果 mysql 立即删除数据会导致磁盘上产生大量的碎片使用延迟清理可以减少磁盘碎片提高磁盘的读写效率如果删除数据时立即清理磁盘上的数据会消耗大量的性能。如果一个大表存在索引只删除其中一行整个索引结构就会发生变化
延迟清理的缺点 这些被标记为删除的数据就是数据空洞不仅浪费空间还影响查询效率。 mysql 是以数据页为单位来存储和读取数据如果一个表有大量的数据空洞那么 mysql 读取一个数据页可能被标记删除的数据就占据了大量的空间导致需要读取很多个数据页影响查询效率
如何回收未使用空间
optimize table 表名
索引的结构
答
索引是存储在引擎层而不是服务层所以不同存储引擎的索引的工作方式也不同我们只需要重点关注 InnoDB 存储引擎和 InnoDB 存储引擎中的索引实现以下如果没有特殊说明则都为 InnoDB 引擎。
mysql 支持两种索引结构 B-tree 和 HASH
B-tree 索引
B-tree 索引结构使用 B 树来进行实现结构如下图粉色区域存放索引数据白色区域存放下一级磁盘文件地址 B-tree 索引B 树实现的一些特点
B 树叶子节点之间按索引数据的大小顺序建立了双向链表指针适合按照范围查找使用 B 树非叶子节点只存储索引在 B 树中每个节点的索引和数据都在一起因此使用 B 树时通过一次磁盘 IO 拿到相同大小的存储页B 树可以比 B 树拿到的索引更多因此减少了磁盘 IO 的次数。B 树查询性能更稳定因为数据只保存在叶子节点每次查询数据磁盘 IO 的次数是稳定的