什么是存储过程

存储过程是一些sql语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程或触发器调用。

它的参数可以被传递和返回,与应用程序中的函数过程类似,存储过程可以通过名字来调用,具有输入参数和输出参数。

存储过程的优缺点

优点

(1)执行速度快——存储过程只在创建时进行编译,以后每次执行存储过程都不需要重新编译,而一般SQL语句没执行一次就需编译一次,所以使用存储过程可提高数据库的执行速度。

(2)减少网络通信量——当对数据库进行复杂操作时,(如对多个表进行insert、update、select、delete时)可将这些复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序完成就是多条SQL语句,可能要多次连接数据库,而换成存储过程只需一次连接。

(3)更强的复用性——存储过程可以重复使用,提高了可重用性,减少数据库开发人员的工作量。

(4)可维护性高——更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。

(5)安全性高,可设定只有某用户才能对指定存储过程的使用权,且存储过程比多条sql稳定,只要数据库不出现问题,基本上是不会出现什么问题的。

(6)分布式工作——应用程序和数据库的编码工作可以单独进行,减少耦合度。

缺点

(1)开发调试差:无良好的IDE开发工具,存储过程的调试比一般SQL要复杂的多。

(2)可移植性差:由于存储过程将应用程序绑定到数据库上,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。SQL是标准的,但存储过程以及控制逻辑,都是各家数据库自已的方言,不可移植到其它数据库。

(3)功能较为局限:业务扩展之后可能会发现无法继续用存储过程实现了。存储过程可能无法和许多中间件、ORM库一起使用。

(4)存储过程的计算,消耗数据库进程所在主机的CPU和内存,增大了对数据库的压力,不适合高并发场景。

(5)存储过程也是代码,但却和代码分离开了,存储在数据库里。版本控制困难,进而造成从开发,测试,到上线整个流程的复杂度增加。写JAVA代码的人和DBA通常是两波人,引来许多管理上的问题,如,数据库权限,两边人员打乒乓球。

(6)存储过程扩展修改上线没有代码方便。

使用场景

存储过程适用于处理场景固定的复杂事务,不要求并发性。互联网高并发的场景,很多数据都是分库分表的,而且要求高度可扩展,原则是对db的保护做到最大化,能减少db压力的就减少db压力,尽量把运算逻辑拉到代码里面。存储过程的优点在于封装性好,直接让db进行运算,但是缺点在于难以维护(修改业务逻辑需要DBA进行操作,而不是后端程序员修改代码),而且大大增大db压力

https://www.zhihu.com/question/57545650

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐