大视图情况下,如何保证执行计划的简洁性?本来只要2个表的数据,往往因为使用了大视图,导致大视图里面的无关表也在读IO。 请问在利用大视图的情况下 如何保证执行计划的最优?
视图举例 select a.col1,a.col2,a.col3,b.col1,b.col2,b.col3,c.col1,c.col2,c.col3 
from a left join b on XXXX
       left join c on XXXX我的sql是 select a.col1,b.col1 from 视图 where XXXX
结果执行计划里面往往包含c表的IO。以上仅仅为举例:实际视图往往很复杂。也千万不要说从基表取数之类的。------------------------------------------------------------------------------------------
问题是 如何做才能保证大视图执行计划的简洁性?

解决方案 »

  1.   

    我的想法是
    由于有C表参于视图的表运算,会改变A和B的计算的行集的结果,所以虽然你只需要A和B表的列,但由于视图是由AB和C计算的结果,所以在你的需求下,仍然要C进行行集计算
      

  2.   

    既然没有任何关系,那就是cross join的关系,不要急于给出结论
      

  3.   

    这个得看执行计划了,然后根据执行计划去做优化
    本来你的视图用了其它无关的表,就会读取其它的表,这个感觉是不可避免的。
    c.col1,c.col2,c.col3  
    如果不读C表的话,这些数据从哪里来?
    如果这些数据没有用的话,为啥还要显示出来,直接去掉,只用啊,b两个表不是更好么?
    请注意,读取C表,是因为结果集里面有C表的东西