【问题标题】:Oracle best practice甲骨文最佳实践
【发布时间】:2026-01-31 04:55:01
【问题描述】:

之后我必须提取一些增量数据并进行一些小而复杂的计算。但是几天过去了,数据变大了,在第一个增量阶段之后,它开始有更多的时间来插入和更新大记录。 所以,我所做的是:

CREATE TABLE T1 AS(SELECT (some_conditions) FROM SOME_TABLE);
CREATE TABLE T2 AS(SELECT (some_conditions) FROM T1);
DROP TABLE T1
RENAME T2 TO T

这是在生产环境中的好习惯吗?不过它的运行速度非常快。

【问题讨论】:

  • 如果代码有效,它可能更适合Code Review
  • @Turing85 这似乎是纯粹的示例代码,所以没有。
  • 你应该把最后一条语句写成RENAME T2 TO SOME_TABLE ???
  • @APC 不需要。 OP 需要确认这一点,但据我了解,他需要定期对表 T 执行某种聚合。
  • @SylvainLeroux 在这种情况下可能缺少DROP TABLE T

标签: mysql oracle performance plsql


【解决方案1】:

通常情况下,我同意 DDL 经常做是一件很糟糕的事情,但我们需要务实。

我认为如果 Tom Kyte(甲骨文大师)说没关系,那么没关系。

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:6407993912330

【讨论】:

  • 我只略读了引用的文档,但我认为主要的瓶颈是由表上有一些索引引起的——因此大大减慢了更新过程。这里不一定是这样。