未使用的SQL数据的最佳实践



假设我有数据库,我给用户提供了一条消息,用户可以删除该消息。该表可能每秒可能有数千个查询。

我读到DELETE语句比UPDATE慢,我应该考虑一下吗?我已经有一个deleted列,因此我可以知道该消息是否已"删除"。但是,我应该立即执行DELETE语句吗?

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

DELETE语句应该更"逻辑",但是DELETE查询太多的性能问题?

我能一次删除所有内容的方法是否存在问题,它可以悬挂数据库吗?

我不确定"删除比更新慢"在所有(甚至大多数)情况下都是正确的 - 有很多不同的事情会影响性能。

其次,对性能进行优化需要大量相互关联的权衡 - 这是一个非常"微"的决定,并且可能根本没有任何影响。或者它可能会将性能挑战转移到堆栈的另一部分或不同的时刻。

第三,这往往是一个"曲棍球棒"问题 - 根据我的经验,数据库性能一直是完全不错的,直到迅速恶化为止,直到您知道这种恶化的原因,您可能会浪费时间或浪费时间或引入额外的复杂性几乎没有奖励。

一般而言,delete from messages where id = $1将与update messages set deleted = 1 where id = $1一样快。但是,如果您在此表的主键上使用群集索引,则可能最终得到许多索引"差距",重建索引可能很昂贵。这会影响您的"实时删除"或"软删除,然后是批处理删除"策略。

我建议您建立一个性能测试环境,并加载大量虚拟数据;然后,您可以进行脚本性能测试以查看实际问题。

最新更新