程序员过关斩将--你为什么还在用存储过程?

存储过程

存储过程是大型数据库系统中用于执行特定函数的一组SQL语句。它存储在数据库中,编译后永久有效。用户指定存储过程的名称,并给出执行该过程的参数(如果存储过程接受参数)。存储过程是数据库中的一个重要对象。

优势

当程序调用数据库时(实际上,仅当请求减少时),可以减少信息传输量。

存储过程是预先优化和预编译的,这样可以节省每次编译的时间,因此一般来说,存储过程的性能优于SQL语句。

调用者可以隐藏数据库的复杂性并封装数据的组装过程。

参数化存储过程可防止SQL注入攻击,并可以对存储过程应用授予、拒绝和吊销权限。

如果业务开发中数据人员和业务代码人员是分离的,业务人员可以直接调用存储过程,而不必关注数据,更倾向于分层开发设计概念。

缺点

存储过程的“一次性优化、多次使用”策略可以节省每次执行时的编译时间,但也会导致致命的缺陷:可能使用了错误的执行计划。

存储过程很难调试,虽然有些DBS提供调试功能,但一般的账户根本没有这种权限,更不用说在线数据库不太可能给你调试权限,甚至进一步的调试效果也比debugg好。正在执行程序。效果更糟。

可移植性差,在切换数据类型时,存储过程将基本停止。

如果业务数据模型发生更改,则必须随业务代码一起更改存储过程。如果它是一个大型项目,这种变化是前所未有的致命的。

不建议用于存储过程

上面存储过程的优缺点,你可以在网络上随便找到它,从表面上看,存储过程的优点还是相当多的,这也解释了为什么许多老程序员喜欢编写存储过程。但随着软件行业的业务变得越来越复杂,面对复杂的业务,存储流程现在有些无能为力。

不建议在商业中使用这道菜,请留言

与直接使用SQL语句相比,使用存储过程操作数据实际上在网络数据量传输中要少得多,但这通常不是数据系统性能的瓶颈。在操作数据的过程中,假设保存存储过程需要100毫秒。数据传输时间是0.5毫秒(甚至5毫秒),我认为这个时间基本上可以忽略不计。

存储过程仅优化一次,这有时是一个缺陷。?惺保孀攀萘康脑黾踊蚴萁峁沟谋浠即娲⒐萄≡竦闹葱屑苹赡懿皇亲罴训模虼苏獯涡枰侄稍せ蛑匦卤嘁耄⑶业敝葱屑苹皇亲罴咽薄U飧銎胶獾闶鞘孪炔恢赖模獾贾乱恍┯τ贸绦蛲蝗患跛俨⑶页绦蛟贝τ谕涎幼刺?

存储过程可以从调用者隐藏数据库的详细信息,但业务代码人员和数据库设计者的情况是两个团队。如果它真的是两个团队,那么业务需要两个团队来理解和沟通。我认为沟通的成本必须很高,而且差异更有可能发生。

该菜认为数据库应该做它最擅长的:存储相关。我已经看过不止一次在存储过程中编写业务的情况。程序代码级别实际上是贫血的薄层,这是一种透明的数据传输。我不同意这种写作,因为我接手了这样的程序,这不是让我头疼的事情,但我正在寻找熟悉业务的数千行存储过程,关键还不是已调试(在线无法调试)。

业务系统的设计通常要求您脱离数据库级别,专注于业务模型的设计,并在程序级别反映业务逻辑,而不是将业务逻辑交给数据级别管理器。几天前我检查了一个“bug”:存储过程是一个列表字符串,其输入参数是主键id,长度实际上是nvarchar(max)。主要功能是根据id列表查询数据。我想说的是,即使你是max的长度,也有长期的可能性,因为业务方传输了什么参数,参数的长度超出了你的DB的控制,所以这种业务必须在程序中处理。我把它丢给了DB,而不是幸运。

如果你对存储过程有高性能的心态,我觉得你被误导了。这道菜被认为是提高性能的关键。相反,系统架构,缓存设计和数据一致性是系统关键问题。

存储过程通常是一种解决方案,但通常不是唯一的解决方案,在选择存储过程作为解决方案之前,请确保它们是正确的选择。

最后,展示一波存储过程

http://jujia.dtpowertech.com.cn