【发布时间】:2013-09-05 16:09:12
【问题描述】:
我在 Oracle Database 11g 上使用 Oracle PL/SQL Developer。我最近写了一个带有一些奇怪行为的视图。当我在不获取查询的最后一页下运行简单查询时,查询时间约为 0.5 秒(缓存时为 0.2)。
select * from covenant.v_status_covenant_tuning where bankkode = '4210';
但是,如果我在 PL/SQL Developer 中获取最后一页,或者如果我从 Java 代码运行查询(即我运行一个检索所有行的查询),视图会发生某些事情并且查询时间会增加到大约20-30 秒。
在我重新编译之前,视图无法再次正常工作。解释计划前后完全一样。分析所有索引和表。我不知道它是否相关,但该视图使用了一些分析表达式,例如 rank() over (partition by .....)、lag()、lead() 等等。
由于我是新来的,所以我无法发布解释计划的图片(需要 10 的声誉),但总的来说优化器有效地使用了索引,并且由于分析功能,它做了一些分类。
【问题讨论】:
-
您可以查看 v$sqlstats(和其他)中的存储的计划。也许甲骨文创建了一个具有不同执行计划的新子游标。顺便说一句:执行计划最好发布为(格式化)文本,而不是图片。
标签: performance oracle plsql oracle11g