有一个大VIEW,里面UNION ALL几个大表。偶然发现虽然是同一个VIEW,可是如果用在不同的SQL中VIEW里面的查询的执行计划很不一样有这种事吗??我一直把VIEW作表用,还以为永远VIEW内部都只会用同一个执行计划将结果查出来。现在遇到这样的问题:
在不同的SQL中使用以上这个VIEW时,有时用了带索引的执行计划查,有时却没用而是全表扫描的执行计划产生了极大的性能差异。(以上结论来自己TKPROF的报告。)想请教一下是什么影响的VIEW内部的查询计划呢?
是使用它的那些SQL的查询与它之间的条件吗?
有什么办法可以改变它或固定它?

解决方案 »

  1.   

    视图是执行计划来自你的基表。影响执行计划的方面
    表是否经过分析,oracle会根据这个选择 cbo 还是 rbo
      

  2.   

    为了优化是重建过一些索引,并还追加了两个索引,奇怪的是它在SQL1里用那几个索引,在SQL2里却又用别的索引不一定就是。具体:
    SQL1的话这个VIEW会用所有表的索引;
    SQL2的话这个VIEW只会其中一个表的,而另外的变成全表扫描了;
      

  3.   


    这两个SQL是在同一次操作中分别执行的。SQL1和SQL2只执行一次并都分析了一次,
    那它们当时所使用的VIEW的基表信息也应该是一致的。
      

  4.   

    是view和其他表关联么?应该是oracle将与view的关联转变成了与基表的关联,从而导致不同sql的执行计划不一样.
      

  5.   

    对,我也有这种感觉,可能是那些外面的联VIEW条件,还在分析中