大家好,我是北漂程序员,欢迎关注公众号:北漂程序员
问题:请讲下mysql执行了delete操作,数据真的被删除了吗
分析:这个问题考察对mysql底层存储的理解。
回答要点:
主要从以下几点去考虑,
1、肯定没有真正删除?
2、为什么这样设计?
mysql执行delete操作后,存储在硬盘上的数据没有被删除,只不过在记录行上做了逻辑删除,即通过删除标识位实现。
因为移除它们之后,很多其他的记录需要在磁盘上重新排列,这样会消耗大量的性能,比如如果是一张大表,存在索引,删除了其中一行,那么整个索引结构就会发生变化,随之而来的是要改变索引结构,必将带来磁盘IO,大家都知道磁盘IO是很浪费性能的。所有被删除的记录都会组成一个垃圾链表,这个链表中记录占用的空间叫做可重用空间,之后有新记录插入的时候可能把已删除记录占用的空间覆盖掉。