一个非常复杂的视图,大约有3000个字符,很多表关联及视图关联。我想问这样复杂的视图Oracle在每次执行时是不是都会对此视图解析一次?而且解析的耗费会比较多呢?
在大型项目中是否尽量少地将功能以视图的形式描述出来?否则会造成视图相当复杂。
主要问的是视图执行的原理及复杂视图的效率影响。

解决方案 »

  1.   

    从实现角度来说,视图就是对sql语句的物理存储。每当你访问这个视图的时候,oracle会先对sql进行语法和语义检查,然后确定此sql是否可以使用用共享池中已经分析过的语句的执行计划,看看在共享池中有没有同样的sql,如果有那么就使用这个执行计划;否则调用优化器生成语句的执行计划,执行此语句。其中使用优化器的步骤是非常耗时的(硬分析),最好能够跳过(软分析)。如果频繁使用此视图,那么肯定不会对视图进行多次硬分析,所以不用担心视图会影响你的效率。视图只是把你要用的sql进行保存而已,你需要担心的是视图中的sql会不会效率太低
      

  2.   

    从实现角度来说,视图就是对sql语句的物理存储。每当你访问这个视图的时候,oracle会先对sql进行语法和语义检查,然后确定此sql是否可以使用用共享池中已经分析过的语句的执行计划,如果有那么就使用这个执行计划;否则调用优化器生成语句的执行计划,执行此语句。其中使用优化器的步骤是非常耗时的(硬分析),最好能够跳过(软分析)。如果频繁使用此视图,那么肯定不会对视图进行多次硬分析,所以不用担心视图会影响你的效率。视图只是把你要用的sql进行保存而已,你需要担心的是视图中的sql会不会效率太低。 
      

  3.   

    我这里省略了很多步骤,但是话粗理不粗,需要关心的是sql的效率,而不是使用了视图。