概念:存储在数据库当中的可以执行特定工作(查询和更新)的一组SQL代码的程序段
重复调用具有特定功能的存储过程在被创建以后可以在程序中被多次调用,而且对存储过程进行修改对应用程序源代码毫无影响,既减少了开发人员的工作量同时提高了程序的可移植性,对存储过程中的sql的语句的优化不会带来代码的更改。
执行速度存储过程是预编译的在首次运行一个存储过程时查询优化器对其进行分析优化并给出最终被存在系统表中的执行计划。而批处理的Transaction-SQL 语句在每次运行时都要进行编译和优化,应用程序中的sql语句数量很大,系统将消耗大量的资源在sql解析上面,而运用过程封装部分sql能有效缓解系统压力,并提高查询响应速度。(详见后续测试)
网络流量一个事务需要用到10个sql,假设每个sql大小为1kb,单从流量上看,使用过程将节省9KB。同时还有交互过程中的网络流量,例如在一个事务性质的sql组合中,每条sql独立提交并获取结果数据做逻辑处理后传值(一个值,一个字符串,甚至一个表)给下一条sql。如果使用存储过程,sql之间的数据交互将在数据库内部进行,减少了大量的网络交互,同时减少的是整个事务的完成时间。
4安全存储过程的运行时依据其创建者的权限。例如用户U不具备A表的任何权限,又需要为其提供部分的数据,可以赋予其调用过程P的权限,U通过存储过来访问数据,在过程中进行参数的审核,一定程度有效防止sql注入攻击,并可以控制其能够得到的数据内容。
5.事务存储过程可结合事务执行。多sql在执行中宕机或网络中断等原因,事务的回滚只能通过程序本身完成,由于程序大部分时间无法确定最后一次sql是否提交成功,回滚的可靠性低,将事务封装在过程中,数据库会有效地进行整个事务的提供和回滚操作。