我有一個過程內部下面的delete語句:甲骨文 - delete語句慢小桌子
delete t_excuse
where EMP_NO = AL_EMPNO
AND TO_CHAR(EXCUSE_DATE,'yyyymmdd') BETWEEN LS_STARTDATE_G AND LS_ENDDATE_G;
這是慢約10秒。
但是當我添加任何選擇與相同的where子句然後執行刪除,它很快。
select count(*)
into v_avariable from t_excuse
where EMP_NO = AL_EMPNO
AND TO_CHAR(EXCUSE_DATE,'yyyymmdd') BETWEEN LS_STARTDATE_G AND LS_ENDDATE_G;
delete t_excuse
where EMP_NO = AL_EMPNO
AND TO_CHAR(EXCUSE_DATE,'yyyymmdd') BETWEEN LS_STARTDATE_G AND LS_ENDDATE_G;
t_excuse上是否定義了任何觸發器?任何索引?索引將在刪除時更新,並執行任何刪除觸發器 - 兩者都不會發生在select語句中,因此這可能是對性能差異的解釋。 – 2014-10-30 08:06:12
沒有觸發器,但pk列上的默認索引 – 2014-10-30 08:07:55
檢查整個數據模型中所有外鍵的索引。如果有缺失,請創建它們。 – nop77svk 2014-10-30 11:07:54