1
4
我会把桌子分成两半
删除的行将实际保留在其他位置,但从
|
2
4
哦,见鬼,是的,索引删除字段。你会一直在质疑它,对吧?与您经常查询的其他字段(如父ID)组合索引也是一个好主意。 |
3
1
可以说,只有在性能问题实际出现的情况下,才可以稍后做出此决定。这在很大程度上取决于以什么速率添加多少行、您的框规格等。显然,应用程序中的抽象级别(以及您使用的任何库的限制)将有助于确定这种更改的难度。 如果出现问题,或者您确定会出现问题,那么首先对两个表之间的已删除标志进行分区,一个表保存当前数据,另一个表保存历史/已删除数据。如您所说,如果“已删除”的数据只对管理员可用,则可以合理地假设(在大多数应用程序中)用户总数(此处仅限于管理员)不足以引起问题。这意味着您的管理员在搜索特定表时可能需要等待更长的时间,但您的用户群(在大多数应用程序中可能更重要)将体验到更少的延迟。如果管理员无法接受性能,您可能希望索引您访问已删除记录的用户ID(或事务ID或其他)字段(我通常索引访问表的每个字段,但在一定程度上,可以权衡哪些索引最值得)。 根据数据的访问方式,还可以使用其他简单的技巧。如果管理员大部分时间都在查找特定记录(而不是读取用户活动的“历史记录”或“日志”),则通常可以假定最近的记录比旧记录更经常被查看。一些DBS包括使最近的记录比旧记录更容易找到的优化选项,但您必须在特定的数据库中查找它。如果失败,您可以手动执行。最简单的方法是建立一个包含所有比 n 天、周或月,取决于您的限制条件和可疑的使用模式。然后,新的数据存储在一个小得多的表中。即使管理员要“浏览”所有记录,而不是搜索特定的记录,也可以从显示第一个记录开始。 n 天,并且有一个链接可以查看所有天,如果他们找不到他们要查找的内容(例如,大多数在线银行应用程序允许您浏览交易,但仅显示历史的前30天,除非您另有要求)。 希望您可以避免进一步,以及共享用户ID或其他类似方案。根据应用程序其余部分的规模,您可能无论如何都必须这样做。除非你肯定你需要这样做,否则我强烈建议首先使用垂直分区(例如,将论坛帖子放在单独的机器上,而不是放在销售记录上),因为这样设置和维护起来要容易得多。如果你最终需要分享用户ID,我建议你使用google;-] 祝你好运。顺便说一句,我不是DBA,所以拿这个加一点盐。 |
Attila Naghi · 在laravel 5版本中使用软删除 7 年前 |
user2305673 · Symfony 3的软删除包 7 年前 |
sterfry68 · Laravel软删除restore()错误 10 年前 |