如何最大限度地降低从高活动表中删除大量行的性能影响

时间:2014-02-02 20:51:44

标签: mysql

我有一个表,每小时都会添加数万个新行。

基于某些事件,我通过将其status字段设置为1来设置给定行的完成状态,更新它的status_timesamp,然后在使用选择查询表时,忽略字段为1的所有行。 / p>

但是这导致了大量的行,我不再需要一个字段为1.我也可能在将来需要字段用于日志记录,但是对于我的应用程序的日常用途,例如不需要行。

我可以删除行而不是将字段更新为1,但我认为删除比更新更昂贵,并且每秒都会发生许多插入。

最终我希望有一种方法可以将状态为1的所有行移动到某种日志表中,而不会影响当前每秒发生多次插入和更新的表。

1 个答案:

答案 0 :(得分:0)

这是一个难以回答的问题。实际上,更新(在非索引字段上)应该比删除更快。在简单的环境中,您可以执行删除操作以及记录所需信息的触发器。

我发现很难相信数据库没有停机时间。你不能在周日凌晨2点在某个时区每周一次进行删除吗?

通常情况下,如果不是这样,那么您就有了高可用性要求。而且,在这种情况下,您将拥有一个复制的数据库。大多数情况下,插入,更新和查询都会转到这两个数据库。在数据库维护期间,只有一个可能正在启动,而另一个“维护”。然后该数据库赶上事务,接管用户负载,另一个数据库“进行维护”。在您的情况下,“维护”意味着执行删除和记录。

如果您有高可用性要求并且没有使用某种类型的复制,那么您的系统比仅仅累积要删除的数据具有更大的漏洞。