程序员过关斩将--为什么不推荐业务中使用存储过程?

菜菜哥,我新接手了一个项目,看的我头疼呀业务有这么复杂呀?不是的,这个老项目完全是用存储过程写的,每个存储过程都好几百行这样呀,是够头疼的~有没有办法帮我了解业务一下?碰到这样的情况,我真帮不了你了,你可以多埋怨几句做的那个人~~~存储过程存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的...

程序员过关斩将--为什么不推荐业务中使用存储过程?

菜菜哥,我新接手了一个项目,看的我头疼呀

业务有这么复杂呀?

不是的,这个老项目完全是用存储过程写的,每个存储过程都好几百行

这样呀,是够头疼的~

有没有办法帮我了解业务一下?

碰到这样的情况,我真帮不了你了,你可以多埋怨几句做的那个人~~~

存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

优势

1. 可以减少程序在调用DB时候的信息传输量(其实减少的只有Request的时候)

2. 存储过程是预先优化和预编译的,节省每次运行编译的时间,所以一般情况下认为存储过程的性能是优于sql语句的。

3. 对调用者可以隐藏数据库的复杂性,将数据组装的过程封装。

4. 参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

5. 如果业务开发中,数据人员和业务代码人员是分离的,业务人员可以不用关心数据,直接调用存储过程,更加面向分层开发设计理念。

劣势

1. 存储过程这种“一次优化,多次使用”的策略节省了每次执行时候编译的时间,但也是该策略导致了一个致命的缺点:可能会使用错误的执行计划。

2. 存储过程难以调试,虽然有些DB提供了调试功能,但是一般的账号根本就没有那种权限,更何况线上的数据库不可能会给你调试权限的,再进一步就算能调试效果也比程序的调试效果要差很多。

3. 可移植性差,当碰到切换数据种类的时候,存储过程基本就会歇菜。

4. 如果业务数据模型有变动,存储过程必须跟着业务代码一起更改,如果是大型项目,这种改动是空前的,是要命的。

https://www.guoxiongfei.cn/cntech/19325.html