安全删除具有出色性能的数据库中的数据的最佳方法是啥? [关闭]
Posted
技术标签:
【中文标题】安全删除具有出色性能的数据库中的数据的最佳方法是啥? [关闭]【英文标题】:What are the best ways to safely delete data in databases with great performance? [closed]安全删除具有出色性能的数据库中的数据的最佳方法是什么? [关闭] 【发布时间】:2021-10-23 00:52:43 【问题描述】:我想要最好的方法来保存用户删除的数据,以添加在查询时以最佳性能从数据库中检索已删除数据的功能,尤其是在数据量很大的情况下。
我想出了两种方法:
添加一个布尔值为 true 的列,表示该行未被擦除,否则为 false 添加每个表的副本,其中包含每个表中已删除的数据如果您还有其他好的方法,请告诉我或评论以上两种方法,尤其是在数据量很大的情况下效果更好。
在此向所有阅读我的问题或试图帮助我的人致以问候和感谢,谢谢。
注意:我使用的是实体框架
【问题讨论】:
一个解决方案是在您的 RDBMS 中Temporal。时态是 ANSI SQL 2011 中引入的数据库功能。Temporal tables in SQL Server 【参考方案1】:你提到的第一种方法基本上是软删除,但它应该反过来工作。例如True = 行已删除。
虽然这样的更新通常可能比对数据库的删除操作“更快”,但它可能取决于您使用的数据库以及数据的结构方式。
软删除的问题在于,您的每一个选择查询都需要更新(以过滤已删除的行),这将影响每个查询的性能(这可能很小且几乎不明显,但需要代码/ SQL 更改)。
通常,软删除也被视为一种临时解决方案,然后通常会稍后执行硬删除。
这是因为当数据库中的数据较少并且每个表的行数较少时(当然有方法可以支持具有数十亿行的表,但这会使数据库操作起来更复杂。有些数据库设计得比其他数据库更好。)
第二种方法可以通过使用执行“OnDelete”的触发器来实现。 但同样,触发器可能对性能不利,并且会减慢您的删除命令(同样,这可能会或可能不会被注意到,具体取决于数据量)。 这样做的好处是您的主表仍然小而高效,您不需要更改任何查询,实际上它对客户端完全不可知。缺点是需要在数据库中管理,因为实体框架无法处理。
那么哪种方式最适合您?
嗯,您需要根据您的业务需求自行确定。如果性能很关键,那么在大型数据集上进行一些测试,看看哪个更适合。
在数据库中的不同表上使用这两种方法没有任何问题。
【讨论】:
以上是关于安全删除具有出色性能的数据库中的数据的最佳方法是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章