Sql 删除过程中超过90天的数据
您是否可以建议,需要制定清理超过90天的数据的程序 我们需要创建临时表,该表将包含90天以上的记录,并且状态从J_DOC表发送Sql 删除过程中超过90天的数据,sql,oracle,plsql,oracle-sqldeveloper,plsqldeveloper,Sql,Oracle,Plsql,Oracle Sqldeveloper,Plsqldeveloper,您是否可以建议,需要制定清理超过90天的数据的程序 我们需要创建临时表,该表将包含90天以上的记录,并且状态从J_DOC表发送 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 reco
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\u ID\u STAT\u TIME\u FRM\u JOB\u DOC作为选择JOB\u ID,last\u update\u TIME\u utc,来自J\u DOC的状态,其中
上次更新时间UTC您根本不需要临时表
对于另一个表HUB_SIG
使用delete
语句,该语句使用delete谓词直接从主表J_DOC
获取job_id
delete from HUB_SIG where JOB_ID in
(select JOB_ID from J_DOC
where LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent')
从J_DOC
中删除更简单,使用WHERE
子句中删除行的标准
delete from J_DOC
where LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent'
从J_文档中删除
在上次更新时间UTC的地方,您根本不需要临时表
对于另一个表HUB_SIG
使用delete
语句,该语句使用delete谓词直接从主表J_DOC
获取job_id
delete from HUB_SIG where JOB_ID in
(select JOB_ID from J_DOC
where LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent')
从J_DOC
中删除更简单,使用WHERE
子句中删除行的标准
delete from J_DOC
where LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent'
从J_文档中删除
上次更新时间UTC时,您说“更快”,但不描述任何性能问题。您是否对delete语句运行了解释计划?每个delete语句需要多长时间,您的目标是什么。你能分享一下解释计划吗?顺便说一句,对于你展示的用法-如果这是一个循环操作,你应该为你的“临时”表使用一个全局临时表(GTT)。没有必要反复删除和重新创建分区。@BarbarosÖzhan-请不要建议人们使用分区,除非提醒他们这是企业版上的一项额外收费。我们不想误导人们违反他们的Oracle许可证。(在Oracle 18c XE中免费提供,但在生产中很少使用该平台。)您说的是“更快”,但没有描述任何性能问题。您是否对delete语句运行了解释计划?每个delete语句需要多长时间,您的目标是什么。你能分享一下解释计划吗?顺便说一句,对于你展示的用法-如果这是一个循环操作,你应该为你的“临时”表使用一个全局临时表(GTT)。没有必要反复删除和重新创建分区。@BarbarosÖzhan-请不要建议人们使用分区,除非提醒他们这是企业版上的一项额外收费。我们不想误导人们违反他们的Oracle许可证。(Oracle 18c XE中免费提供了该平台,但在生产中很少使用该平台。)