记一次SQL优化的经历(数据库定时任务)

问题描述:工做中遇到的一次问题,咱们在一个展现页面数据加载太慢,缘由是展现的数据是从视图中获取的,可是视图的结构比较复杂,使用了多表关联,数据是从多个表中获取的。最开始是去想办法优化视图以及视图中用到的表。可是因为结构复杂,优化事后仍是慢,好比用一个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优化

相关文章
相关标签/搜索