有一个大VIEW,里面UNION ALL几个大表。偶然发现虽然是同一个VIEW,可是如果用在不同的SQL中VIEW里面的查询的执行计划很不一样有这种事吗??我一直把VIEW作表用,还以为永远VIEW内部都只会用同一个执行计划将结果查出来。现在遇到这样的问题:
在不同的SQL中使用以上这个VIEW时,有时用了带索引的执行计划查,有时却没用而是全表扫描的执行计划产生了极大的性能差异。(以上结论来自己TKPROF的报告。)想请教一下是什么影响的VIEW内部的查询计划呢?
是使用它的那些SQL的查询与它之间的条件吗?
有什么办法可以改变它或固定它?
在不同的SQL中使用以上这个VIEW时,有时用了带索引的执行计划查,有时却没用而是全表扫描的执行计划产生了极大的性能差异。(以上结论来自己TKPROF的报告。)想请教一下是什么影响的VIEW内部的查询计划呢?
是使用它的那些SQL的查询与它之间的条件吗?
有什么办法可以改变它或固定它?
表是否经过分析,oracle会根据这个选择 cbo 还是 rbo
SQL1的话这个VIEW会用所有表的索引;
SQL2的话这个VIEW只会其中一个表的,而另外的变成全表扫描了;
这两个SQL是在同一次操作中分别执行的。SQL1和SQL2只执行一次并都分析了一次,
那它们当时所使用的VIEW的基表信息也应该是一致的。