|
|
1
15
这里还有一个 article 关于Oracle中的大规模删除,您可能需要阅读。 |
|
|
2
9
当然,您必须重新创建没有验证的约束、没有日志的索引、授权等等。。。但是速度非常非常快。
另一个比创建数以百万计的插入更好的选项是:
不建议选择PLSQL,因为它可以创建 快照太旧 由于您正在使用打开的游标(循环游标)提交(并关闭事务)并希望继续使用该游标而导致的消息。甲骨文允许这样做,但这不是一个好的做法。 更新:为什么我可以确保最后一个PLSQL块正常工作?因为我相信:
|
|
|
3
8
在中执行大规模删除时
表演时
这意味着如果您删除
这也意味着并发查询(如果有)将需要从
这也意味着如果优化器选择
鉴于以上所述,您可能最好在中删除数据
因此,首先,您将摆脱上述问题,其次,优化您的应用程序
不过,在您的情况下,我会尝试强制优化器使用
要执行此操作,请确保temp表上有一个主键
您需要打开主键
|
|
|
4
6
最好像第一个例子中那样一次完成所有工作。但我肯定会先和你的DBA讨论一下,因为他们可能想回收清除后不再使用的块。此外,可能存在从用户角度通常看不到的调度问题。 |
|
|
5
4
如果原始SQL需要很长时间,一些并发SQL可能会运行缓慢,因为它们必须使用UNDO在没有未提交更改的情况下重建数据版本。 妥协可能是这样的
您可以根据需要调整ROWNUM。较小的ROWNUM意味着更频繁的提交,并且(可能)在需要应用undo方面减少了对其他会话的影响。然而,根据执行计划,可能会有其他影响,总体上可能需要更多的时间。 从技术上讲,循环的“FOR”部分是不必要的,因为退出将结束循环。但我对无限循环持偏执态度,因为如果它们被卡住了,那么终止会话是一种痛苦。 |
|
|
6
4
我建议将其作为单个删除运行。 是否存在要从中删除的表的子表?如果是,请确保这些表中的外键已编制索引。否则,您可能会对删除的每一行的子表进行完整扫描,这可能会导致速度非常慢。 您可能需要一些方法在删除运行时检查其进度。看见 How to check oracle database for long running queries? 正如其他人所建议的,如果你想测试水,你可以输入:rownum<在你的查询结束时有10000。 |
|
|
7
0
我曾经在Oracle 7上做过类似的事情,我不得不从数千个表中删除数百万行。对于全面性能,尤其是大型删除(一个表中的行数超过百万),该脚本运行良好。 删除_sql() 在指定的表中查找一批行ID,然后逐批删除它们。例如
上面的示例基于sql语句一次从表MSF170中删除500条记录。
如果您需要从多个表中删除数据,只需包含其他数据即可
哦,记住将回滚段放回在线,它不在脚本中。
哦,还有最后一点提示。这将是缓慢的,根据表格的不同,可能需要一些停机时间。测试、计时和调整是您在这里最好的朋友。 |
|
|
8
0
全部的 表中记录的,并且是 当然 删除表中所有行 命令 (在你的例子中,你只想删除一个子集,但对于任何潜伏着类似问题的人,我想我应该添加这个) |
|
|
9
-1
对我来说,最简单的方法是:-
|
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |