删除MySql行,还是标记“死”?

时间:2012-03-27 16:39:59

标签: mysql database

我一直有一种奇怪的感觉,就是从某些类型的表中删除行。

例如,如果我有一个用户表...当他们删除他们的帐户时,而不是完全删除他们的行,我一直在标记为“死”或不活动。如果我再次需要它,我可以保留它们存在的记录。

在这样的情况下 - 考虑性能,开销等 - 我应该删除该行,还是只标记为非活动状态?

哪个更“常见”?

5 个答案:

答案 0 :(得分:4)

就个人而言,我几乎总是使用你所描述的“软删除”。

如果空间有问题,我会有一份工作,会在删除软删除的记录一段时间之后定期清理它们。

答案 1 :(得分:3)

也许您可以将非活动的MySQL记录移动到另一个用于保存非活动帐户的表中?这样,如果需要,您可以简单地将它们移回,或者如果数据库大小成为问题,则删除表。

答案 2 :(得分:3)

从数据库中永久删除数据非常有价值。标记为dead

我通常给出这种情况的状态。在这种模式

  1. 0无效
  2. 1有效
  3. 2 Trashed

答案 3 :(得分:1)

除了“软”删除之外,另一种解决方案是使用“审计表”。我最近在dba.stackexchange.com上问了what they were

审计表通常用于记录在第二个表上执行的操作,例如插入/更新/删除,可能存储旧值和新值,时间等。

可以直接使用触发器实现它们。

优点:

  • “未使用的”数据位于单独的表中
  • 很容易将细节级别旋钮从细粒度旋转到粗粒度
  • 根据具体实施情况,它可能更多在空间方面有效

缺点:

  • 由于数据位于单独的表中,因此在行被“取消删除”的情况下可能会导致密钥冲突
  • 根据确切的实施情况,它可能更少有效空间

答案 4 :(得分:1)

这个问题让我记住了这个有趣的anecdote。我的观点:在硬删除和软删除之间进行选择时需要考虑很多因素,没有拇指规则可以告诉您选择哪一个。