VIEW_STU_SCHEME 为视图
cj_lncjb ,cj_lrcjb 为表 
 select a.kch,a.kcm,a.xh,b.stu_sch_group_num,b.stu_sch_group_name
    from cj_lncjb a, VIEW_STU_SCHEME b 
      where   b.kch=a.kch and b.xh=a.xh and b.xh='1923206'  
   union
  select a.kch,a.kcm,a.xh,b.stu_sch_group_num,b.stu_sch_group_name
    from cj_lrcjb a,VIEW_STU_SCHEME b 
      where   b.kch=a.kch and b.xh=a.xh and a.lrzt='1' and b.xh='1923206'
--这个语句查询时间需要0.06秒
但是 先创建视图:
  create or replace view v_allcj as
    select kch,kcm,xh  from cj_lncjb
      union
    select kch,kcm,xh from cj_lrcjb where lrzt='1'
然后执行:
  select a.kch,a.kcm,a.xh,b.stu_sch_group_num,b.stu_sch_group_name from 
    v_allcj a,VIEW_STU_SCHEME b where  b.kch=a.kch and b.xh=a.xh and b.xh='1923206' 
--这个语句执行10分钟都没出结果
请问一下这是为什么?

解决方案 »

  1.   

    VIEW_STU_SCHEME 为视图
    cj_lncjb ,cj_lrcjb 为表 
     select a.kch,a.kcm,a.xh,b.stu_sch_group_num,b.stu_sch_group_name
        from cj_lncjb a, VIEW_STU_SCHEME b 
          where   b.kch=a.kch and b.xh=a.xh and b.xh='1923206'---在这里为何哥哥不改为A.XH = '1923206' 把WHERE b.kch=a.kch  AND A.XH = '1923206'
       union
      select a.kch,a.kcm,a.xh,b.stu_sch_group_num,b.stu_sch_group_name
        from cj_lrcjb a,VIEW_STU_SCHEME b 
          where   b.kch=a.kch and b.xh=a.xh and a.lrzt='1' and b.xh='1923206'
      同样 WHERE b.kch=a.kch  and A.xh='1923206'
    --这个语句查询时间需要0.06秒
    但是 先创建视图:
      create or replace view v_allcj as
        select kch,kcm,xh  from cj_lncjb
          union
        select kch,kcm,xh from cj_lrcjb where lrzt='1'
    然后执行:
      select a.kch,a.kcm,a.xh,b.stu_sch_group_num,b.stu_sch_group_name from 
        v_allcj a,VIEW_STU_SCHEME b where  b.kch=a.kch and b.xh=a.xh and b.xh='1923206' 
      

  2.   

    这个对比不公平,不是视图的问题,你应该用下一句与你的视图对比:select a.kch,a.kcm,a.xh,b.stu_sch_group_num,b.stu_sch_group_name
    from (select kch,kcm,xh  from cj_lncjb
           union
           select kch,kcm,xh from cj_lrcjb where lrzt='1')a, 
           VIEW_STU_SCHEME b
    where  b.kch=a.kch and b.xh=a.xh and b.xh='1923206' 你会发现这句应该不会比用视图快
      

  3.   

    谢谢各位,我最后采用的方法是 将数据量小的表组成试图后,再做联合查询
    物化视图不是随着数据的改变而实时改变的
    tiandehui1985()  谢谢,不过不知道这样改了会不会提高查询效率,但是最少看起来更规范