問題描述:工做中遇到的一次問題,咱們在一個展現頁面數據加載太慢,緣由是展現的數據是從視圖中獲取的,可是視圖的結構比較複雜,使用了多表關聯,數據是從多個表中獲取的。最開始是去想辦法優化視圖以及視圖中用到的表。可是因爲結構複雜,優化事後仍是慢,好比用一個order by查詢時間上會超過上百秒,這樣確定是不行的。只能換種方法,因而決定用數據庫的定時任務去定時的刪除表數據,新增表數據,簡單說就是更新數據。可是第一次接觸,仍是花費了些時間。數據庫
代碼以下:服務器
--建立表V_TEST,數據與結構和視圖要同樣 CREATE TABLE V_TEST AS SELECT * FROM TEST; --定義定時任務SCIENTIFIC_JOB,用於刷新數據 declare TEST_JOB number; BEGIN DBMS_JOB.SUBMIT( JOB => TEST_JOB, --任務名字 WHAT =>'DELETE FROM V_TEST;INSERT INTO V_TEST SELECT * FROM TEST;COMMIT;', --須要執行的存儲過程名稱或SQL語句 NEXT_DATE => SYSDATE, --初次執行時間-當即執行 INTERVAL => 'TRUNC(SYSDATE+1)+9/24' --天天早上九點 ); COMMIT; end; --注意!!! 這裏要查出TEST_JOB的ID,會在下面用到。 查出LOG_USER爲當前數據庫用戶的ID即爲任務ID select * from dba_jobs; --執行任務 1183是上面查出來的ID 須要本身替換 begin dbms_job.run(1183); end; 定時任務相關查詢語句: --查看系統當前時間 由於是遠程服務器,因此時間和本地會不同 select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual; --查看全部的定時任務 select * from dba_jobs; -- 查看正在執行的調度任務 select * from dba_jobs_running; --刪除任務 1183是查詢任務的ID begin dbms_job.remove(1183); end;
很久沒有發博客了,最近有點忙。加油0.0優化