mysql删除操作其实是假删除

在 InnoDB 数据库引擎中,执行 DELETE 操作并非真正删除数据,而是给数据打上删除标记。这表示表空间大小不会因删除操作而减少,即为假删除。我们通过一个例子验证这一结论。创建存储过程,插入10万条数据,查看占用空间。10万条数据占3.52M,执行 DELETE 后,表空间大小不变,证实了删除操作仅标记数据...
mysql删除操作其实是假删除
在 InnoDB 数据库引擎中,执行 DELETE 操作并非真正删除数据,而是给数据打上删除标记。这表示表空间大小不会因删除操作而减少,即为假删除。我们通过一个例子验证这一结论。创建存储过程,插入10万条数据,查看占用空间。10万条数据占3.52M,执行 DELETE 后,表空间大小不变,证实了删除操作仅标记数据,未实际移除。

标记删除的数据可复用。例如,在特定记录中删除一条,其位置被标记,下次插入符合条件记录时可复用该位置。数据页全部标记删除后,整个页可复用,插入限制少于行记录复用。插入记录与被标记位置不匹配时,数据页复用提供可能。标记删除形成数据空洞,浪费空间并影响查询效率。每次磁盘访问对应IO操作,空洞增加IO次数,降低查询速度。插入和更新操作同样产生空洞,影响表性能。

频繁增删改操作导致数据空洞,占用更多空间,降低查询效率,表现为查询速度变慢。解决方法是重建表,建立临时表,将数据重新插入,替换原表。重建过程可释放表空间,减少空洞影响。使用重建命令可以达到相同效果,推荐实践验证。InnoDB 引擎下,其他数据库引擎可能有不同表现。2024-10-16
mengvlog 阅读 116 次 更新于 2025-12-19 02:38:12 我来答关注问题0
檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部