【发布时间】:2016-10-24 00:45:45
【问题描述】:
我尝试调整现有视图。很抱歉没有发布示例,但我未能复制问题。而且我无法理解这种行为。 我的视图(视图 A)基于另一个视图(视图 b)和一个表(表 C)。在选择列表中,使用了其中的一些字段和一些包调用。 特定 Select 的运行时间接近 32 秒。 我分析了 Statement 和 startet 以优化 View b。我删除了视图 a 中不需要的所有列,并减少了视图 b 的开销。 在此之后,View a 上的选择快了 5 秒。可以肯定的是,我多次执行选择以获得有效的平均执行时间。 几分钟后,我再次执行了声明,我得到了 32 秒。我执行了多次,但它不会变得更快。
此数据库上没有流量,数据量没有变化。到目前为止,这是我在获得合理结果方面遇到问题的第一个陈述,将分析该陈述。 我首先看的解释计划看起来不错。没有全表扫描(我知道 FTS 总体来说还不错)。我不知道为什么执行时间如此不稳定,这使得优化视图和比较结果变得困难。
我认为这听起来像是一个转储问题,但我看不出问题所在,也不知道下一步该做什么。
感谢和抱歉我的英语不好。
【问题讨论】:
-
任何 SELECT 语句中的 PL/SQL(包)函数调用都可能对性能有害。每次调用都会在 SQL 和 PL/SQL 之间进行上下文切换的开销,有时由于查询优化的方式,即使最终结果只是一个函数,也可能会调用数千或数百万次几行。
标签: oracle performance view