近来遇到这样一个问题,我建立了一个拥有8个基础表和一个视图(这个视图是由两个字段完全相同的表直接累加合并的)的视图,这个大视图里拥有14万左右条数据,我测试了一下,直接select * from 此大视图 执行需要40秒左右(额滴神啊)。这仅仅是查询,而我要做的操作是从这么多数据中选出插入时间在某个时间之后的数据,然后将选出的数据写入到另一个表中,这样一系列操作结束之后,大概需要1分半,这个时间也忒长了吧。而且有时候在那个时间之后没有插入数据,也就是不需要转移数据,可它仍然得执行一分钟左右,这也忒坑爹了呀!各位路过的大神,帮小弟解决一下吧,我是真无语了!sql 视图  效率低  提高 多表建立

解决方案 »

  1.   

    不要用表去关联视图。
    普通视图就是一句SQL代码而已,调用的时候也是去执行这句代码生成结果集返回给你而已。你还不如直接对表进行关联查询。
      

  2.   

    整的太麻烦了,视图就是sql语句,你要优化视图又要优化连接视图的sql语句,直接捡个存储过程,优化存储过程和表索引即可。
      

  3.   

    这个大视图里拥有14万左右条数据,我测试了一下,直接select * from 此大视图 执行需要40秒左右(额滴神啊)。
    ---把执行计划分析下,看哪个执行操作开销cost最大,然后通过索引优化之,以cost最小去获取数据
    ---如果优化过了,可以给视图加上索引,索引视图能够提升性能
      

  4.   

    先看看执行计划(ctrl+M 然后运行你的语句,就会出现执行计划)中百分比较高的部分,定位问题,如果select * from xxx,通常索引都是没什么用的,另外你能告诉我用视图的理由吗?
    回复请引用,谢谢
      

  5.   

    我的没有加索引,加了索引能优化到这种程度?可以用SQL Server自带的索引优化程序跑一下,看看需要什么索引。
    另一点,将子视图里面的SQL语句放到主视图中,据说,视图套视图,索引不能正常使用。
      

  6.   

    我需要往一个表里移动一些数据,但是这些数据并不是来自一个表中,所以我建了视图。这种情况下一个查询就可以了,也就是把你视图里面的逻辑提取出来,另外68%的那个表中涉及的查询是否没有where条件?如果没有,那这个表上索引没有多大用处。除非你要预排序。语句方便贴出来看看不?如果超长就算了。