请帮我解析一下这段存储过程,个人并不是太懂存储过程,要100篇阅读详尽解析的解答

我们系统中有大量的存储过程, 我一直很反感存储过程,请教大家在访问并发比较大的情况下, 存储过程性能怎么样? 会不会出现死锁的问题?
按投票排序
死锁的问题要靠存储过程的编程技巧来规避,没有一定会出现或者一定不会出现之说。好的程序员总是有办法让死锁不出现,不过这样的程序员薪水会很高。存储过程的性能分为两个方面。好的方面,存储过程中使用SQL时数据不会出库,比在外部计算性能要高;坏的方面,存储过程本身的解释执行性能较差,比SQL执行会差出一个数量级;如果业务处理中涉及的数据量很大且难以用SQL先行过滤汇总,这时存储过程是有性能优势;如果业务处理主要是过程复杂,循环较多,这时存储过程是性能就会拖后腿,要根据实际情况权衡取舍了,没有一定可行的标准。存储过程还有个坏处是不易管理和移植。存储过程用到的过程控制语法常常是数据库特有的,而不象SQL有相当的标准性,换了数据库基本上没法执行;另外,存储过程需要事先编译再执行,修改算法需要dba的配合,对安全性造成威胁;还有就是存储过程不好管理,数据库中的存储过程除了可以用包进行归类外,再无其它分类管理办法。而包只支持一层的分类,所以对于庞大的数据库存储过程来说,容易造成管理混乱。
所以,一般的原则是,只要不是出现前述性能分析中的第一种情况,使用外部计算的性能可以容忍(外部计算本身的性能会远超过存储过程,性能损失主要在于把数据从库中取出来),能不用存储过程就不要用吧。可以用来代替存储过程的产品非常多,润乾的集算器可以写出复杂的计算逻辑,代替存储过程,减轻数据库的负担,便于管理。如果能将数据库外置于库外,还可以获得远超过存储过程的性能,详细的请参考。
可以参考这个问题 接触过企业内部使用的,也接触过互联网WEB应用。通常来说,企业应用场景里用存储过程的较多,WEB应用场景较少。并发比较大的情况下,单独的SQL性能也一般吧,存储过程会减少客户端和数据库建立链接、分配资源的消耗……呵呵我还是蛮喜欢在Sqlserver里用存储过程的,大多用在定时执行作业这类的场景里。
一定会有死锁,但是支持并发,就需要临时表了。存储过程的性能涉及到sql优化,具体语句的规范性,不同写法的性能IO比较,加hint。
已有帐号?
无法登录?
社交帐号登录谁能帮我解释一下sql2000中sp_who存储过程查询出来的结果?_百度知道
谁能帮我解释一下sql2000中sp_who存储过程查询出来的结果?
master AWAITING COMMAND
DOMAIN\loginX
BACKUP DATABASE
DOMAIN&#92spid ecid status
blk dbname cmd
---- ---- ------
------------
--- ------ -----
background sa
LAZY WRITER
LOG WRITER
background sa
master SIGNAL HANDLER
background sa
RA MANAGER
background sa
master TASK MANAGER
CHECKPOINT SLEEP
background sa
master TASK MANAGER
background sa
master TASK MANAGER
background sa
master TASK MANAGER
background sa
master TASK MANAGER
background sa
master TASK MANAGER
DOMAIN\loginX
BACKUP DATABASE
DOMAIN\loginX
BACKUP DATABASE
DOMAIN&#92
我有更好的答案
用于显示当前用户和进程的信息 包括id 进程状态 等录名 主机名 正在使用的数据库等
其他类似问题
为您推荐:
sql2000的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁谁能帮我看看这个存储过程,哪儿写得不对了,谢谢!
[问题点数:100分,结帖人ganju]
谁能帮我看看这个存储过程,哪儿写得不对了,谢谢!
[问题点数:100分,结帖人ganju]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。我现在有一个数据库存储过程,不知道写的对不对 也不知道怎么改,请求哪位大神帮我看看,可以有物质奖励_百度知道
我现在有一个数据库存储过程,不知道写的对不对 也不知道怎么改,请求哪位大神帮我看看,可以有物质奖励
加我丘丘 帮我看一下存储过程~谢谢谢谢啦 其实很简单的 只不过我是代码白痴
create PROCEDURE [dbo].[p]@version bigint ,@InvCode nvarchar(100)ASBEGINSET NOCOUNT ON;with tb1 as(SELECT d.cInvCode,d.cInvName,a.Version ,a.VersionDesc,a.VersionEffDate, c.free1 ,d.cInvStd,d.cInvAddCode ,e.cComUnitName,a.CreateUser,a.CreateDate,a.ModifyUser,a.ModifyDate FROM bom_bom a inner join bom_parent b on a.bomid =b.bomid INNER JOIN bas_part c on b.pa憨辅封恍莩喝凤桶脯垃rentId=c.partId INNER JOIN inventory d on c.invcode=d.cinvcode INNER JOIN ComputationUnit e on d.cComUnitCode=e.cComunitCode WHERE 1=1 and d.cInvcode &= 'A; and d.cInvcode &= 'A;),tb2 as(Select a.bomid ,c.InvCode, a.version from bom_bom a inner join bom_parent b on a.bomid =b.bomid inner join bas_part c on b.parentId=c.partId ),tb3 as(Select a.SortSeq,a.OpSeq,c.cInvcode,c.cInvName,c.cInvStd, c.cInvAddCode,d.cComUnitName,a.BaseQtyN,a.BaseQtyD ,a.CompScrap,Qty=a.BaseQtyN/a.BaseQtyD ,a.OpComponentId ,b.Free1,a.bomid
FROM bom_opcomponent a inner join bas_part b ponentId=b.partId INNER JOIN inventory c on b.invcode=c.cinvcode INNER JOIN ComputationUnit d on c.cComUnitCode=d.cComunitCode ) select * from tb3 inner join tb2 on tb3.bomid=tb2.bomid inner join tb1 on tb2.version=tb1.version and tb2.InvCode=tb1.InvCode where tb1.version=@version and tb1.InvCode=@InvCodeendgo
能加我 然后帮忙看一下么
其他类似问题
为您推荐:
存储过程的相关知识
其他1条回答
SQL数据库吗?存储过程发上来
涉及的表比较多 ~
然后帮我看下么
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁复杂SQL语句,谁能帮我解释下这句话的意思??这句话是存储过程里面的一句话,now是传递的一个参数。_百度知道
复杂SQL语句,谁能帮我解释下这句话的意思??这句话是存储过程里面的一句话,now是传递的一个参数。
(SELECT client_ip,= DATE_SUB( now) AS ret_statitics_table_temp,event_typeCREATE TEMPORARY TABLE statistics_table_temp SELECT
* FROM (SELECT now) times,severity FROM audit_table WHERE `tstamp` &gt, INTERVAL 10 MINUTE) AND `tstamp` &lt
提问者采纳
整个Select的主体部分就是一个Select * From times,ret_statitics_table_temp。times和ret_statitics_table_temp子查询的别名。
大神,能不能在具体一点这里面的now是一个时间,不是列名或者表名啊?这个怎么理解?
1、整个语句建立一个statistics_table_temp的临时表。2、整个Select的主体部分就是一个Select * From times,ret_statitics_table_temp。这个Select语句没有where条件,结果就是两个表的笛卡儿积。3、times是一个子程序的结果,就一行。假如你的now的值是' 22:32:52',那么times整个表就只有一行,这一行的值就是你的now的值。4、ret_statitics_table_temp也是一个子查询的结果,SELECT client_ip,ruleid,event_type,severity FROM audit_table WHERE `tstamp` &= DATE_SUB(now, INTERVAL 10 MINUTE) AND `tstamp` & now,Where条件的意思是,tstamp在now这个参数指定的时间之前的10分钟内(大于等于now时间减去10分钟,并且小于now时间)。假如你的now的值是' 22:32:52',where条件就是tstamp在' 22:22:52'和' 22:32:52'之间。应该解释的差不多了吧!
提问者评价
太谢谢您了,么么哒
其他类似问题
为您推荐:
sql语句的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 解析几何 尤承业 解答 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信