〔SQL2000)
EXC:对多表组成的视图,进行查询时提供参数给视图(加上Where等)如:select * from view where ??? 时,查询步骤是不是视图先得到所有记录,然后再选出符合自定义条件的记录??要是那样,那速度不是慢死了??如果不是,那用参数对视图查询时内部是如何进行的呢?

解决方案 »

  1.   

    谢谢楼上的,你说的这点我也是知道的,疑问如下:假如我的视图无过滤条件查询的结果是有100万条记录,语句类似如下:
    〖语句一〗create view v_test as select table1.* from table1 
             inner join table2 on table1.col1=table2.col1依据自定义筛选条件从中取出部分记录,语句类似:
    〖语句二〗select * from v_test where [条件]问题:在SQL2000服务器内部是不是这样执行:
    先得到所有记录,即先执行语句一,然后再执行语句二得到我要的结果?
    如果这样,那如果岂不是先得到100万条记录,再筛选,速度是个大问题!
      

  2.   


    如luckweb(冰川) ( ) 说的,我想大家都应该知道要遍历所有记录,
    问题是如果我用存储过程或者带限定条件的SQL语句的话,加上表已有索引的话,仅选择一部分记录,执行起来应该是很快的。
    但如果用视图,真按 BearRui(我有点笨,但我很特别,所以我特别笨!) 所说那样子执行的话,那岂不慢太多了!!唉,各位老大指条明路哪
    数据库如果基本按第三范式来搞,不用视图处理起来基本上是很麻烦,范式低些嘛,冗余数据太多了。
    可是现在我不放心视图的速度!如何是好??
      

  3.   

    当然不是了,这是sqlserver内部的处理机制,你应该不用太担心吧,不过如果你真的关心,你可以使用sqlserver查询分析器里面的工具来看执行顺序和每个步骤的性能。
      

  4.   

    sql内部机制,会自动进行转换,不用担心。