未使用的SQL数据的最佳做法

时间:2019-02-19 13:10:08

标签: sql-server

假设我有一个数据库,我可以在其中向用户发送一条消息,并且用户可以删除该消息。该表每秒可能有数千个查询。

我已阅读到DELETE语句比UPDATE慢,我应该考虑到这一点吗?我已经有一个deleted列,因此我可以知道消息是否被“删除”。但是,我应该立即执行DELETE语句还是应该每晚或以类似方法删除所有已读邮件?

UPDATE语句应该更快,但是随后剩下的一堆数据必须稍后删除,以便数据库的大小不会太大

DELETE语句应该更具逻辑性,但是DELETE查询过多会导致性能问题吗?

一次删除所有内容的方法是否会出现问题,它会挂起数据库吗?

1 个答案:

答案 0 :(得分:0)

我不确定在所有(或什至大多数)情况下“删除的速度都比更新慢”是否成立-有很多影响性能的因素。

第二,优化性能需要许多相互关联的权衡-这是一个非常“微观”的决定,并且可能根本没有任何影响。否则它可能会将性能挑战转移到堆栈的不同部分,或在不同的时间。

第三,这往往是一个“曲棍球棒”问题-以我的经验,直到性能迅速下降,数据库性能一直都很好,直到您知道造成这种情况的原因,这很可能浪费时间或引入额外的复杂性而几乎没有回报。

一般而言,delete from messages where id = $1的速度与update messages set deleted = 1 where id = $1一样快。但是,如果在该表的主键上使用聚集索引,则可能会导致大量索引“空白”,并且重建索引可能会很昂贵。这会影响您的“实时删除”或“先删除后先批量删除”策略。

我建议您构建一个性能测试环境,并用大量虚拟数据加载它;然后可以编写性能测试脚本以查看实际问题是什么。