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

存储过程奇怪的问题
我有一个系统里面有一个存储过程 2000多行。

我直接给参数在查询器里面运行需要好久好久都没有反应。参数只给1天时间就需要5分多钟,要是一个月的时间那就一直运行不出来(等了一个多小时就取消了)。

我把这个里面的代码原封不动的分成三部份分,分别运行。最长的只要2分钟,最短的只要5秒,一共加起来也不到5分钟。

请问把代码写在一个存储过程中会有影响吗?这是什么原因?想了好久都想不明白,同样的代码分开的效率这么高

大家有碰到过这样的问题吗?

------解决方案--------------------
引用:
我有一个系统里面有一个存储过程 2000多行。

我直接给参数在查询器里面运行需要好久好久都没有反应。参数只给1天时间就需要5分多钟,要是一个月的时间那就一直运行不出来(等了一个多小时就取消了)。

我把这个里面的代码原封不动的分成三部份分,分别运行。最长的只要2分钟,最短的只要5秒,一共加起来也不到5分钟。

请问把代码写在一个存储过程中会有影响吗?这是什么原因?想了好久都想不明白,同样的代码分开的效率这么高

大家有碰到过这样的问题吗?


大半是处理逻辑的问题。 应用上得看是否有游标等坑货。

------解决方案--------------------
加个重编译选项试下。。
------解决方案--------------------
引用:
Quote: 引用:

加个重编译选项试下。。


能具体讲一下吗?

我分开运行是在查询分析器里面执行的,查询分析器和存储过程会不会在效率是不同?


exec sp_recompile @objname='存储过程名称'
重新编译的数据库本身没有更新此存储过程的执行计划,此时效率可能不高,所以建议lz重新编译一下存储过程
------解决方案--------------------
不如根据业务需求重写这个存储过程。
我们看不到存储过程代码,也只能瞎猜,比如是不是用了游标,比如表没有相关索引,等等。