在SQL Developer中,查询运行缓慢而没有参数

时间:2016-04-26 14:32:54

标签: sql oracle oracle-sqldeveloper

当我使用SQL Developer运行查询并使用像:type之类的绑定变量时,系统会提示我输入要使用的值,然后查询的运行速度比使用固定的文字值替换绑定变量要快得多,比如说'A'

例如第一个运行速度比第二个查询快的查询:

首次查询(运行0.5秒)

select DMDUNIT, LOC, SUM(QTY)
from hist
where dmdunit = :lv_dmdunit and type = :lv_type and loc = :lv_loc
and startdate >= sysdate - 40
GROUP BY DMDUNIT,LOC

第二次查询(运行1.7秒)

select DMDUNIT, LOC, SUM(QTY)
from hist
where dmdunit = 'PROD_1' and type = 'A' and loc = 'B101'
and startdate >= sysdate - 40
GROUP BY DMDUNIT,LOC

为什么第一个查询比第二个查询运行得更快?我可以采取哪些步骤使第二个查询的运行速度与第一个查询一样快?

这是一个小查询,1秒没有太大区别,但我也有大量查询,其中相同查询(参数和非参数)之间的差异是10到15分钟。

1 个答案:

答案 0 :(得分:1)

这是一个有趣的测试:只是为了好玩,更改绑定变量的名称(例如,将它们称为:x,:y和:z) - 或者更好的是,只需更改其中一个变量中的一个字母。第一次运行查询时,它应该与第二个查询一样长,如果所有其他条件都相同(从不存在)。

使用绑定变量的一个优点是查询只被解析一次。引擎仍然需要运行查询,但是避免了解释查询,优化查询等所增加的开销。技术术语是“软解析”与“硬解析”。很好的阅读:

https://blogs.oracle.com/sql/entry/improve_sql_query_performance_by