在性能好的数据库中安全删除数据的最好方法是什么?



我希望以最好的方式保存用户删除的数据,以便在查询时,特别是在数据量很大的情况下,能够以最佳的性能从数据库中检索被删除的数据。

我想出了两个方法:

  • 添加一个布尔值的列,该列的值为true,表示该行未被擦除,否则为false
  • 添加每个表的副本,该副本携带从每个表中删除的数据

如果你有其他好的方法,请告诉我或评论以上两种方法,特别是在数据量很大的情况下,它们表现得更好。

我的问候和感谢提前每个人谁读我的问题或试图帮助我,谢谢你。

注意:我使用实体框架

您提到的第一个方法基本上是软删除,但它应该以相反的方式工作。例:True =删除一行

虽然这样的更新可能经常"更快";

在数据库上进行删除操作,这可能取决于您正在使用的数据库和数据的结构方式。软删除的问题是,你的每一个选择查询都需要更新(过滤删除的行),这将影响每个查询的性能(这可能是轻微的,几乎不明显,但需要代码/SQL更改)。

通常,软删除也被视为临时解决方案,然后硬删除通常在稍后执行。

这是因为当数据库中的数据更少时,当每个表的行更少时,数据库将更高效,需要更少的资源(当然有方法支持具有数十亿行的表,但这会使数据库的操作更复杂)。一些db被设计得比其他db更好地处理这个问题。

第二个方法可以通过使用执行"OnDelete"的触发器来实现。但是,触发器可能对性能不利,并且会降低删除命令的速度(同样,这可能很明显,也可能不明显,这取决于数据量)。这样做的好处是,你的主表保持小而高效,你不需要改变你的任何查询,事实上,它是完全不可知的客户端。缺点是你需要在数据库中管理这个,因为实体框架无法处理这个。

那么哪种方式最适合你呢?

嗯,你需要根据你的业务需求自己决定。如果性能很重要,那么在一个大数据集上做一些测试,看看哪个适合。

在DB的不同表上同时使用这两种方法是没有问题的。

相关内容

最新更新