MySQL之所以不推荐delete,主要有两个原因:
1.delete只是把被删除数据的标记位移除,并没有真正的删除记录,只是在查询时忽略这些记录。这会导致表文件膨胀,存储空间不释放,影响性能。如果是大表,delete掉一半的数据,表文件依然保留原来的大小,空间浪费会很严重。
2.delete删除后,表的行数变少,但索引并不随之减少。这会导致索引的 Sparseness 变高,查找效率降低。如果追求高性能,这显然是不合适的。那么,如果面试官追问用什么方式比较好,可以回答MySQL推荐用逻辑删除,而不是物理删除。逻辑删除是在表中增加一个删除标记字段,更新这个字段表示删除。查询时添加where条件过滤未删除的记录。这可以避免空间不释放和索引过稀疏的问题。
如果面试官追问为什么不永久删除,可以说除非迫不得已,否则逻辑删除更符合大多数场景的需求。数据永久丢失可能会造成信息的永久损失,这往往不太可取。逻辑删除找到了一个平衡,既满足了删除需求,又保留了历史数据,方便后续的恢复与追溯。