0

我有一个不断增长的大表(目前有 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,但我认为随着时间的推移它会增长。我的核心问题是我不知道如何每次都选择相同的行集。我需要将查询保持在可管理的大小,因为运行时间过长的查询会延迟服务器复制。

4

1 回答 1

2

如果你的错误表上有一个 ID 字段,你可以这样做。

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

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

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

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

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

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

于 2012-11-20T16:16:09.593 回答