关于存储过程的一个奇怪问题,高手请进!

foguohf 2009-08-06 08:58:31
各位有没有遇到,在程序里调用存储过程,执行的速度很慢,但把存储过程里的内容直接写到程序里,运行速度就很快。为什么?
...全文
94 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
alisafan123 2009-08-07
没碰到过,难道有很多用户同时在用?
回复
cailee 2009-08-07
麦迪同学总结的很不错。good
回复
幸运的意外 2009-08-07
是不是在程序里还有其他的处理呢?再者就是,如果存储过程直接在sql中运行,那么可能有个执行计划优化的过程,所以,也有可能比程序中快一些。
回复
ssxw 2009-08-07
确实碰到过这种情况,,存储过程执行比T-sql更慢,,
部分原因是,存储过程旧的编译信息已过期,不是最优的执行计划了造成的,
可以用exec sp_recompile 'procedure_Name' 重新编译,

还有调用函数时,查询分析器执行是1s,客户端却要30s,可以用sql语法,代替函数
能正常,,

回复
soft_wsx 2009-08-06
[Quote=引用 8 楼 sdhdy 的回复:]
确实很奇怪,你们多少个用户同时访问数据库?可以在人少的时候再试试。
[/Quote]呵呵,看一下SQL SERVER进程如何

重启一下SQL SERVER服务试试,或重启服务器
回复
netcup 2009-08-06
存储过程第一次执行需要编译,会慢一些,但是后面再执行,只要调用的方法对,就不用再编译了,会比较快啊,是不是你调用存储过程的方法不对,导致没次都编译?
回复
guguda2008 2009-08-06
[Quote=引用 7 楼 happyflystone 的回复:]
强制指定不缓存该过程的计划试试
每次编译新的计划
[/Quote]
顶,试试这个,说不定真是编译的问题
回复
sdhdy 2009-08-06
确实很奇怪,你们多少个用户同时访问数据库?可以在人少的时候再试试。
回复
-狙击手- 2009-08-06
强制指定不缓存该过程的计划试试
每次编译新的计划
回复
SQL77 2009-08-06
[Quote=引用 2 楼 xiequan2 的回复:]
有这种事吗?你搞反了吧
[/Quote]
是呀,我怎么觉得别扭
回复
--小F-- 2009-08-06
直接写到程序里应该慢些吧 不然别人还写存储过程做什么?
回复
SQL77 2009-08-06
顶学习,一般都是调用的
回复
feixianxxx 2009-08-06
存储过程的优点:

   1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

   2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

   3.存储过程可以重复使用,可减少数据库开发人员的工作量

   4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权



--------------------------------------------------------------------------------
相对于直接使用SQL语句,在应用程序中直接调用存储过程有以下好处:   

(1)减少网络通信量。

调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条的调用SQL语句要高得多。   

(2)执行速度更快。

有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。   (3)更强的适应性.

由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。   

(4) 布式工作.

应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。


回复
xiequan2 2009-08-06
有这种事吗?你搞反了吧
回复
feixianxxx 2009-08-06
我觉得应该相反
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2009-08-06 08:58
社区公告
暂无公告