代码之家  ›  专栏  ›  技术社区  ›  razenha

最适合短寿命柱的索引

  •  1
  • razenha  · 技术社区  · 15 年前

    在我当前的项目中,有些表有一个名为“changed”的列,该列指示自上次检查以来当前行是否已更改。所有的insert和update语句都包含此列。

    每小时,我都会运行一个计划任务,查询所有已更改的行,对这些行进行一些操作,然后将空值设置为“已更改”列。

    这可能是一个性能问题,因为我将在本专栏中做大量的写和读操作,所以索引将不断地被重建。

    对于这种情况(而不是不使用这种机制),最好的选择是什么?

    2 回复  |  直到 15 年前
        1
  •  3
  •   KM.    15 年前

    如果您的表很大,请删除该列并创建一个专用表(仅包含主键信息),并将触发器插入到该表中。然后您只需要处理这个小表,并在完成行时清除它。您需要为正在跟踪的每个表执行此操作。

    如果您的表很小,那么这个列可能不是一个坏主意,但是如果您在这些表上有大量的选择和更新,并且您的计划处理循环很慢,那么您可能会看到阻塞/锁定。

    如果使用列,最好使用lastchgdate列,然后只处理一个范围内的所有行(每次需要跟踪要处理的范围),但不需要更改lastchgdate来显示它是“完成”。如果您的计划进程正在更新实际行,这可能是没有意义的,但是您没有说。

        2
  •  0
  •   HLGEM    15 年前

    由于列可能只有两个值(空值和1表示已更改),因此索引可能无论如何都是无用的。