【发布时间】:2021-03-03 06:09:42
【问题描述】:
您能否建议,需要对超过 90 天的数据进行清理程序。
我们需要从 J_DOC 表创建 TEMP TABLE WILL HAVE 记录超过 90 天和 STATUS SENT。
create table TEMP_ID_STAT_TIME_FRM_JOB_DOC as select JOB_ID, last_update_time_utc, status from J_DOC where
LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent';
total records are: 4659140
select count(*) from TEMP_ID_STAT_TIME_FRM_JOB_DOC;
4659140
so we have created index on JOB_ID column to perform deletion operations faster any suggestion for faster performance:-
CREATE INDEX JOB_ID_INDEX
ON TEMP_ID_STAT_TIME_FRM_JOB_DOC(JOB_ID);
CREATE INDEX JOB_ID_INDEX_JOB_DOC
ON J_DOC(JOB_ID);
CREATE INDEX JOB_ID_INDEX_HUB_SIG
ON HUB_SIG(JOB_ID);
we need to first delete from hub_sig table for records older than 90 days and STATUS SENT
delete from HUB_SIG where JOB_id IN ( SELECT JOB_ID
FROM TEMP_ID_STAT_TIME_FRM_JOB_DOC);
after that we need to delete from main table J_DOC table
delete from J_DOC
where JOB_id IN ( SELECT JOB_ID
FROM TEMP_ID_STAT_TIME_FRM_JOB_DOC);
请建议我们可以包括哪些更快的删除操作,以及当天工作完成后
我们需要将此临时表重命名为 TEMP_JOB_ID_FROM_J_DOC_1119
我们需要在程序中包含所有这些步骤,请建议。
【问题讨论】:
-
您说“更快”,但没有描述任何性能问题。您是否对您的删除语句运行了解释计划?
-
每个删除语句需要多长时间,您的目标是什么。你能分享一下解释计划吗?
-
顺便说一句,对于您展示的用法 - 如果这是一个重复操作,您应该为您的“临时”表使用全局临时表 (GTT)。无需反复删除和重新创建它。
-
@BarbarosÖzhan - 请不要建议人们在未提醒他们在企业版上额外收费的情况下使用分区。我们不想误导人们违反他们的 Oracle 许可证。 (它免费包含在 Oracle 18c XE 中,但很少用于生产平台。)
标签: sql oracle plsql oracle-sqldeveloper plsqldeveloper