【问题标题】:Oracle - truncating a global temporary tableOracle - 截断全局临时表
【发布时间】:2010-04-28 23:05:55
【问题描述】:

我在迭代中处理大量数据,每次迭代处理大约 10-50 000 条记录。因为有这么多的记录,我先将它们插入到全局临时表中,然后再进行处理。通常,每次迭代需要 5-10 秒。

在每次迭代后截断全局临时表以便每次迭代都可以从一个空表开始是否明智?大约有 5000 次迭代。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    不!全局临时表的整个想法是,当您不再需要数据时,数据会自动消失。

    例如,如果您希望数据在 COMMIT 时消失,则应在最初创建表时使用 ON COMMIT DELETE ROWS 选项。

    这样,您不需要执行 TRUNCATE - 您只需 COMMIT,表格就完全是新的和空的,可以重复使用了。

    【讨论】:

      【解决方案2】:

      每次运行 50000 条记录进行 5000 次迭代?如果您需要进行如此多的处理,那么您当然可以优化您的处理逻辑以更有效地运行。与截断表格相比,这会给您带来更快的速度。

      但是,如果您完成了临时表中的数据,则应该截断它,或者只是确保使用该表的下一个进程不会再次重新处理相同的数据。

      例如有一个“已处理”标志,因此新进程不使用现有数据。 或者 不再需要时删除数据。

      【讨论】:

      • Dario 询问的是一个全局临时表,它不仅仅是一个普通的临时表,而是 Oracle DB 中的一种特定类型的表。
      猜你喜欢
      • 2012-06-10
      • 2017-10-02
      • 2023-03-27
      • 1970-01-01
      • 2016-04-02
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多