【发布时间】:2022-01-06 01:18:52
【问题描述】:
我正在尝试将以下语句用于删除过程,它必须删除大约 23566424 行,但 oracle 需要将近 3 个小时才能完成该过程,我们已经在“SCHEDULE_DATE_KEY”上创建了一个索引,但仍然是该过程速度很慢。有人可以建议如何在 oracle 中更快地删除
DELETE
FROM
EDWSOURCE.SCHEDULE_DAY_F
WHERE
SCHEDULE_DATE_KEY >
(
SELECT
LAST_PAYROLL_DATE_KEY
FROM
EDWSOURCE.LAST_PAYROLL_DATE
WHERE
CURRENT_FLAG = 'Y'
);
【问题讨论】:
-
表格的总行数是多少?仅当谓词具有高选择性(与总行数相比,它评估为真的行数非常低)时,索引才可能有助于提高性能。
-
@astentx 表格总行数为310879005行
-
您可以尝试
alter session enable parallel dml,然后执行delete和parallel提示:delete /*+parallel(SCHEDULE_DAY_F)*/ from ...。对如此大量的行使用全表扫描而不是索引会更好。如果您需要定期运行此操作,您可以使用SCHEDULE_DATE_KEY上的分区来简化数据管理,并为所需的分区执行truncate partition。 -
@astentx 让我试试我用上面的方法更新你,谢谢你的快速回复。
-
@karthik 你有没有想过或尝试我的解决方案?