RT,no_merge是指在viewing merge错误的时候使用这个hint,请问一下怎么看出来视图合并错误呢?视图合并具体指的是什么,能否举例说明,请教各位大牛们了!

解决方案 »

  1.   

    /* with argument */SELECT /*+NO_MERGE(v)*/ t1.x, v.avg_y
       FROM t1, (SELECT x, AVG(y) AS avg_y FROM t2 GROUP BY x) v,
       WHERE t1.x = v.x AND t1.y = 1;/* in query block */SELECT t1.x, v.avg_y
       FROM t1, (SELECT /*+NO_MERGE*/ x, AVG(y) AS avg_y FROM t2 GROUP BY x) v,
       WHERE t1.x = v.x AND t1.y = 1;
      

  2.   

    我是想问一下,这个hint在什么情况下才去用!
      

  3.   

    使用情况大体是这样:
    如果在查询中用到多个视图,而组成这些视图的SQL语句都是优化好了的,单独访问任何一个视图,性能都没有问题。
    如果此时不加NO_MERGE,则ORACLE会自动将若干个视图拆散,重新构造执行计划。
    而事实证时,重新构造的执行计划往往会比较糟糕,于是,这种情况下就可以利用NO_MERGE(按字面理解就是不把若干个视图的查询条件进行合并),避免ORACLE将视图的查询拆散。