SQL Performance是对远程数据库和可变条件的查询

时间:2014-08-07 17:52:08

标签: sql oracle plsql

我试图编写类似于此的查询:

DECLARE
  last_run = DATE;    
BEGIN
  SELECT trunc(last_run_date)
  INTO last_run
  FROM job_log
  WHERE job_name = 'test_job'

 FOR data_row in 
  (SELECT * 
    FROM data_table@remote.host 
    WHERE creation_date between last_run AND sysdate)
 LOOP
   DBMS_OUTPUT.PUT_LINE(data_row.id);
 END LOOP;
END; 

问题是,当我运行查询时,大约需要15-30分钟才能完成。当我有一个硬编码日期代替光标中的last_run变量时,查询大约需要1-2分钟。例如:

SELECT * 
        FROM data_table@remote.host 
        WHERE creation_date between '03-AUG-2014' AND sysdate)

当我使用变量作为条件的一部分而不是硬编码时,有没有人知道为什么查询会受到这样的性能影响?

感谢您的帮助

编辑:我应该提一下' job_log'表没有通过远程数据库查询,我直接连接到它。

0 个答案:

没有答案