java面试一日一题:mysql执行delete数据真的被删除了吗

问题:请讲下mysql执行了delete操作,数据真的被删除了吗

分析:这个问题考察对mysql底层存储的理解。

回答要点:

主要从以下几点去考虑,

1、肯定没有真正删除?

2、为什么这样设计?

 

mysql执行delete操作后,存储在硬盘上的数据没有被删除,只不过在记录行上做了逻辑删除,即通过删除标识位实现。

因为移除它们之后,很多其他的记录需要在磁盘上重新排列,这样会消耗大量的性能,比如如果是一张大表,存在索引,删除了其中一行,那么整个索引结构就会发生变化,随之而来的是要改变索引结构,必将带来磁盘IO,大家都知道磁盘IO是很浪费性能的。所有被删除的记录都会组成一个垃圾链表,这个链表中记录占用的空间叫做可重用空间,之后有新记录插入的时候可能把已删除记录占用的空间覆盖掉。

 

posted @ 2021-04-15 22:58  良工说技术  阅读(331)  评论(0编辑  收藏  举报