Mysql:删除行与使用“已删除”列

时间:2011-05-31 06:45:48

标签: mysql

我以前认为删除自动增量表中的行会损害SELECT性能,因此我一直在使用名为“removed”的tinyint列来标记项目是否被删除。

我的SELECT查询是这样的:

SELECT * FROM items WHERE removed = 0 ORDER BY id DESC LIMIT 25

但是我想知道它是否确实有意义只删除那些行。不到1%的行被标记为“已删除”,因此对于mysql来说,检查每行是否删除= 0似乎是愚蠢的。

那么删除行会不会以任何方式损害性能?

3 个答案:

答案 0 :(得分:3)

这在很大程度上取决于您的用例 - 以及您的用户。将行标记为已删除可以在各种情况下为您提供帮助:

  • 如果用户决定“哦,我 毕竟需要该项目”,则无需通过备份来恢复它 - 只需再次翻转“已删除”位(注意潜在的隐私影响)
  • 使用外键,你不能只是绕过删除行,你打破了数据库中的关系;同样适用于安全/审计日志
  • 您没有更改行数(如果删除的行加起来,可能会降低索引效率)

此外,在正确编制索引时,在我的测量中,影响总是微不足道(请注意我写了“测量” - 同样去了解,不要盲目相信互联网上的某些人)。所以,我的建议是“使用removed专栏,它有显着的好处,没有明显的负面影响”。

答案 1 :(得分:0)

我认为在选择查询上删除行损害。通常人们会使用名为“已删除”的额外列[在您的案例中删除]以提供类似功能的恢复。因此,如果您不提供还原功能,那么您可以删除它不会影响选择查询的行,据我所知。 但是在删除记住关系的同时,它们也应该被删除或导致错误或提供错误的结果。

答案 2 :(得分:0)

您只需在表格中填写越来越多您不需要的记录。如果您以后不打算使用它们,我认为您根本不需要存储它们。如果你想保留它们,但不打算经常使用它们,你可以创建一个临时表来保存你的“删除”记录。