我在 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 的声誉),但总的来说优化器有效地使用了索引,并且由于分析功能,它做了一些排序。