日期:2014-05-17  浏览次数:20664 次

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

各位路过的大神,帮小弟解决一下吧,我是真无语了!
sql?视图??效率低??提高?多表建立

------解决方案--------------------
就是索引视图了

参考
------解决方案--------------------
执行计划看过吗?
------解决方案--------------------
比如视图里使用了表A,然后你在外面又使用了表A和这个视图关联,就会导致一些问题的出现。
------解决方案--------------------
这个大视图里拥有14万左右条数据,我测试了一下,直接select * from 此大视图 执行需要40秒左右(额滴神啊)。
---把执行计划分析下,看哪个执行操作开销cost最大,然后通过索引优化之,以cost最小去获取数据
---如果优化过了,可以给视图加上索引,索引视图能够提升性能
------解决方案--------------------
先看看执行计划(ctrl+M 然后运行你的语句,就会出现执行计划)中百分比较高的部分,定位问题,如果select * from xxx,通常索引都是没什么用的,另外你能告诉我用视图的理由吗?


回复请引用,谢谢
------解决方案--------------------
引用:
Quote: 引用:

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


回复请引用,谢谢

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