重新认识存储过程

来源:互联网 发布:通讯网络与设备是什么 编辑:程序博客网 时间:2024/05/22 01:56

重新理解存储过程

         对于存储过程,之前的理解基本停留在sql语句的集合这个简单的层面,因为之后使用相对较少也没有深入理解存储过程,现在项目中又用到了存储过程,而且组长重推存储过程,所以又重新理解了下存储过程。

         简单来看,存储过程只不过是把复杂的sql语句从我们原来的.net或者java程序里转移到了数据库中,这样我们调用的时候只需要知道存储过程名和需要传递的参数即可,但是就是这么一个简单的改变其实很不简单:

 

  • 存储过程可以接受输入参数,以输出参数的形式给调用过程返回多个值;
  • 存储过程可以给调用过程或者批处理返回状态值,表示成功或者失败;
  • 存储过程可以调用其他存储过程并执行它们;
  • 存储过程允许模块化编程,也即是说,可以独立于应用程序创建它们,可以在不重新编译应用程序的情况下修改它们。
  • 存储过程允许以更快的速度执行。数据处理反复多次时,存储过程会比应用程序提交给数据库的SQL代码更快。因为创建存储过程时,就已经对它们进行了解析和编译,第一次执行过后,可以使用处于内存中的这个过程,在客户-服务器系统中,这在很大程度上提高了性能,在这样的系统中,几个客户调用和执行同一个存储过程。相反,SQL语句每次运行时都要从客户端重复发送,数据库引擎每次执行它们时,都要进行编译和优化,这在很大程度上影响了应用程序的性能。
  • 存储过程可以大大地减少网络通信量,在存储过程中完成数据密集型操作任务并且只给通用程序返回一次,不必在网络上把几个SQL语句发送多次,这将节省很多网络通信工作。
  • 存储过程可用作安全机制,我们可以用这样的一种方式建立用户组,即只有某些用户组可以执行某个存储过程。

 

从一张图来看就是存储过程相当于做了一个计算移动,把复杂sql语句的编译和计算的工作转移到了数据库端,这样可以把db和存储过程看成一层,相比于常用的传递sql语句(可以说是数据移动,把sql语句和我们的数据处理层D层看做一层)剥离了我们的程序和数据库,有点解耦的意味。

 

         

0 0
原创粉丝点击