5、每次按条件读取视图数据时,SQL执行顺序是怎么样的呢?是先按条件先从原表筛选出数据,然后再组成视图形式的数据集,还是 
      先按照视图条件形成虚表,然后再按照条件返回数据呢?如果是后者,当组成视图数据越来越多的时候,对于我前面所说的查询是否会越来越慢呢? 关于这个大家怎么看?      

解决方案 »

  1.   

    VIEW与存储过程相似;当首次执行视图时,只有其查询树存储在过程高速缓存中。缺省情况下每次访问视图时,都重新编译其执行计划。 但是过程可修改配置不重新编译。
    在少量数据时,两个似乎没有什么差别,
    在大量数据时,似乎VIEW更快点吧
      

  2.   

    当基表有频繁的插入与删除操作时,并且 有大量数据时VIEW快些
      

  3.   

    4,理论上是视图最快.
    因为相对于直接连表的查询语句而言,它省去了编译时间
    相对于存储过程而言,sql对中间对象处理略简单些.
    但实际上对于你这样的查询语句,三者没有区别. 原因很简单,是数据量大,而不是语句复杂.但是你举的例子根本不对等,存储过程返回了两个行集,视图和查询语句都只一个行集.5,
    如果
    create view v
    as 
    select a.a x,a.b y,b.c z from a inner join b on a.x=b.x where a.y='z'
    这样,然后再执行
    select * from v where x='aaaa'相当于执行
    select * from 
    (
    select a.a x,a.b y,b.c z from a inner join b on a.x=b.x where a.y='z'
    ) v
    where x='aaaa'它是将子查询先产生结果集缓存到内存后再执行where x='aaaa'的过滤呢?
    还是直接把 where x='aaaa'放到里面去, 这个,你一看查询计划就知道了.
    根具(子查询)内外部的连系,sql会自己转化的.
      

  4.   

    5、每次按条件读取视图数据时,SQL执行顺序是怎么样的呢?是先按条件先从原表筛选出数据,然后再组成视图形式的数据集,还是先按照视图条件形成虚表,然后再按照条件返回数据呢?如果是后者,当组成视图数据越来越多的时候,对于我前面所说的查询是否会越来越慢呢? 
    ---------------------------------------------------
    楼主太多虑这些了。这是SQL引擎要考虑的事情。
    如果你很想看SQL引擎到底使用那种方法,可以打开execution plan看一下。
    如果数据很多话,你是真的需要看一下执行计划的,看看可以怎么优化一下。
    3、对于这个查询,我想到了种方式: 
          (1):把表A和表B关联成一个视图,然后用一条SQL语句来实现这个查询: 
                select   a,b,c   from   view_test   where   danhao='123' 
          (2):在一个存储过程里实现: 
                    select   a,b   from   A   where   danhao='123' 
                  select   c   from   B   where   danhao='123' 
          (3):select   A.a,A.b,B.c   from   A   join   B   on   A.danhao=B.danao   where   A.danhao='123' 
    -------------------------------------------------------------
    这3种方法其实差不多。但是存储过程要更有效一些。关于视图的使用原则是,如果能用直接的查询实现,就没有必要使用视图。所以,你的第一种方法大可不必。
    因为数据库引擎最终要把视图转化成其对应的物理表,才开始分析和优化查询。视图可以用来简化代码,屏蔽底层表结构,但是对提高性能没有多少帮助。甚至比第三种方法还慢。使用存储过程的好处是,数据库引擎只需要进行一次SQL的解析和优化,省却了很多不必要的步骤。
    4、我在想,当表A与表B的数据越来越多的时候,哪种方法会更快一点呢? 
    -------------------------------------------------------------
    数据越来越多的时候,三种方法都会慢。
    为你的表建有效的索引和更新统计数据才是最有效的。