如何提高存储过程的执行速度?

现在我写了一个存储过程,该存储过程调用视图,而视图有调用基本表(表中约有几十万条记录),这样以来在执行存储过程时需要十几分钟,有没有办法提高查询速度哪?
---------------------------------------------------------------

如果视图不是适时变动的话就把它存到表里。
---------------------------------------------------------------

如果你是因为从视图中取数才造成速度慢的话
你可以建立一个临时表,将你需要的数据先放在临时表中,在从临时表中取数计算
这样你的运算速度会有很大改观
---------------------------------------------------------------

这些都是头痛的问题,我一般的办法是:

尽量少用视图,特别是在数据量大的情况下,如果不得以用视图的话,将这个视图中的记录先存储到临时表中再进行操作!

还有对数据表建议索引,这样的话速度将得到很大的提高!

查询数据的时候尽量做到小批量多次查询,这样的话,数据处理起来不至于太吃力,特别是在网络数据库中,对网络的负荷也是一个很大的改善!
---------------------------------------------------------------

如果用临时表的话,并发性的数据必然是个问题!
该用视图时肯定要用。
---------------------------------------------------------------

存储过程性能决定于两个方面的因素,一个是表的物理设计,如合适的索引及数据的分区,另一个就看程序编写得如何。
有些人往往用循环对一个大表反复汇总计算,这样性能肯定高不了。换一种做法,组织一个光标(cursor),光标记录按处理的方便排序,这样仅仅对这个大表执行一次或很少几次的查询就可以完成所有计算功能。不过,这样的光标循环的程序看起来要复杂一些。我有过这样的经历:一个同事写了一个过程,执行了半小时仍然没能出来,不得不中止,按上述方法更改,五分钟就搞定。
曾经有些书中介绍光标性能如何如何差,我看是他用的有问题。
如果需要对表中得很少一部分数据进行很多次的循环操作,不妨将这些数据保存到临时表中,对小的临时表的操作总比大表的性能要高,并且处理方便。

---------------------------------------------------------------

这么夸张, 十几分钟, 我查几百万记录也不用 1 秒, 关键 Index
---------------------------------------------------------------

用试图干什么呢?
PROCEDURE的作用就是将大量复杂的逻辑分步执行,在这每一步中用table(SQL Server 2000中新类型,在内存中,用法和临时表差不多),比临时表快很多。
试一试将VIEW分解一下!

Published At
Categories with 数据库类
comments powered by Disqus