在我当前的项目中,一些表有一个名为“changed”的列,它指示自上次检查后当前行是否已更改。所有insert和update语句都包含此列。
每小时,我运行一个调度任务,查询所有已更改的行,对这些行执行一些操作,然后将null设置为“已更改”列。
这可能是一个性能问题,因为我将在本专栏中进行大量的写入和读取操作,索引将不断重建。
这种情况的最佳选择是什么(而不是不使用这种机制)?
答案 0 :(得分:3)
如果您的表很大,请删除该列并创建一个专用表(仅包含主键信息)并将触发器插入此表中。然后你需要处理这个小表,并在完成行时清除它。您需要为要跟踪的每个表执行此操作。
如果您的表很小,该列可能不是一个坏主意,但如果您对这些表有很多选择和更新,并且您的计划处理循环或真的很慢,您可能会看到阻塞/锁定。
如果你选择一个列,最好有一个LastChgDate列,然后你只需处理一个范围内的所有行(你需要跟踪每次处理的范围),但你不需要更改LastChgDate以显示它已“完成”。如果您的预定进程正在更新实际行,则可能没有实际意义,但您没有说。
答案 1 :(得分:0)
由于列可能只有两个值(null和1表示更改),因此索引可能无用。