MySQL - 在大表的同一子集上运行多个更新查询

时间:2012-11-20 14:44:45

标签: mysql

我有一个很大的增长表(目前有1400万行和数量)。它是日志中的“错误”列表。其中一些错误是我想在上游修复时要过滤的已知问题。在表中,我有两个位'CheckedForFilter'和'Filtered'我想在10,000行块中执行以下操作。

 1) Select on 10,000 rows (where 'CheckForFilter' is false)
 2) Run a series of queries that set the 'Filtered' bit in certain criteria is true
 3) After the last query runs set the 'CheckForFilter' bit to true

可以设置'过滤'位的查询列表目前是5但我认为随着时间的推移它会增长。我的核心问题是我不知道如何每次都选择相同的行集。我需要将查询保持为可管理的大小,因为运行时间过长的查询会延迟服务器复制。

1 个答案:

答案 0 :(得分:2)

如果您的错误表上有ID字段,则可以执行此操作。

创建一个“过滤器”表,其中包含要检查的下一个10,000个ID的最小和最大ID值。在此表中有一个名为“已检查”的标记,用于确定是否已检查所有过滤器。

运行过滤查询,其中错误表中的ID介于“过滤器”表中“已检查”字段= 0的最小和最大ID值之间。

完成后,在“过滤器”表的最小和最大ID范围内更新这些记录上的CheckedForFilters标志。

更新“过滤器”表并设置“已检查”字段= 1.如果愿意,您还可以存储日期和时间。

为接下来的10,000条记录运行此操作,直至完成。

这也可以让您保留过滤器运行时间的历史记录。如果你愿意,你也可以存储在一个单独的表中,为每个批次运行过滤器。