社区
疑难问题
帖子详情
关于存储过程的一个奇怪问题,高手请进!
foguohf
2009-08-06 08:58:31
各位有没有遇到,在程序里调用存储过程,执行的速度很慢,但把存储过程里的内容直接写到程序里,运行速度就很快。为什么?
...全文
195
15
打赏
收藏
关于存储过程的一个奇怪问题,高手请进!
各位有没有遇到,在程序里调用存储过程,执行的速度很慢,但把存储过程里的内容直接写到程序里,运行速度就很快。为什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
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
打赏
举报
回复
我觉得应该相反
存储过程
的
一个
奇怪
问题
我在做
一个
项目的时候遇到了
一个
有关于
存储过程
的很
奇怪
的
问题
:
我的这个
存储过程
的where有点复杂:
SELECT
'CN101'||SUBSTR(A.LNDT,4,1)||'1',
F.CUSTCOD
FROM LC A,
AM B ,
HHB C ,
TABCHMAS D ,
DEPBIM
一个
Oracle
存储过程
编译死锁的
奇怪
现象
近日现场安装人员反映有
一个
存储过程
一编译,服务器CPU使用率就居高不下,并且该
存储过程
也编译不过去,造成死锁。经测试,创建类似
存储过程
,定位发生错误的语句,
问题
出现在
一个
select into 语句上,例子如下: CREATE OR REPLACE PROCEDURE pro_test IS n_sw110 NUMBER(4); n_sw35 NUMBER(4); n_sw10
今天碰到
一个
很
奇怪
的
问题
,关于
存储过程
,留下以后用
今天碰到
一个
很
奇怪
的
问题
,关于
存储过程
,几下以后用
一个
存储过程
。内容就不写了。
问题
:在查询分析器上执行速度很快,几乎几秒钟就可以完成!而在程序里执行需要很久,甚至不能完成!(已排除代码
问题
)还导致浏览器卡死。 解决方法:修改
存储过程
名称。 猜想:应该是
存储过程
执行过期导致,
存储过程
是预编译的, 在第一次执行的时候, 会生成执行计划, 以后执行的时候, 会使用这个执行计划(除非
存储过程
执行
存储过程
时候的
一个
非常
奇怪
的性能
问题
系统中存在
一个
模块,需要完成大量的合法性检查和查询,为了提高性能,设计了
存储过程
包和
一个
主
存储过程
,由数据访问层调用, 但是在执行该模块的时候经常超时,甚至等抛出待锁的错误。在我的计算机上同样安装了Oracle,但是执行该
存储过程
的时间不超过5秒钟, 使用该模块的时候性能也是表现很好。花费了将近
一个
星期的时间对该执行该
存储过程
进行优化,但是
问题
依然没有得到解决,百思不得其解。...
疑难问题
22,298
社区成员
121,727
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章