【发布时间】:2022-06-11 01:45:54
【问题描述】:
我有一个包含 2.3 亿条记录的表,我需要根据某些条件每天从该表中删除 300 条记录。现在,该表没有在其上创建索引。要删除 300 条记录,我创建了一个执行删除部分的作业。客户端不能在这个特定的表上创建索引(或分区索引)。
截至目前,我正在使用 CURSOR FOR 方法从该表中删除记录,但它运行 3 小时以删除 300 条记录。
您能否建议任何方法从没有创建索引的大表中删除记录。
【问题讨论】:
-
光标将是性能最低的选项。你怎么知道要删除哪些行?
-
还有另一个表有 id 要删除,我们获取 300 条记录并将这些 id 提供给我们需要删除的表。为此,我使用 FOR LOOP CURSOR。
-
此表上没有创建索引 - 只是为了澄清一下,它甚至有一个主键(根据定义是索引的)?您是否有主键 ID 来识别需要删除的记录?真正的问题可能是在这里使用光标,这听起来完全没有必要(根据上面 HoneyBadger 的注释 - 在所有条件相同的情况下,这将是最糟糕的选择)。
标签: sql oracle plsql sql-delete