利用存储过程优化复杂的数据库操做

参考其余文章列举存储过程的优劣,据此分析目前智慧电站总项目下,还有那些地方的数据库操做,适合使用存储过程进行优化。php

存储过程是什么?

储存程序 (Stored Procedure),又可称预储程序或者存储过程,是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象,它能够视为数据库中的一种函数或子程序。——维基百科html

能够理解为数据库中的函数过程。web

存储过程的优点

就我在项目中实际使用来讲,当前台处理涉及多条数据库查询语句操做,并出现临时表需整合多个表筛选多余信息的状况下使用到了存储过程。而且发如今数据库中写一个存储过程,web端、移动端以及桌面端均可以调用。sql

引用自微软文档-存储过程(数据库引擎)数据库

减小了服务器/客户端网络流量

过程当中的命令做为代码的单个批处理执行。这能够显著减小服务器和客户端之间的网络流量,由于只有对执行过程的调用才会跨网络发送。 若是没有过程提供的代码封装,每一个单独的代码行都不得不跨网络发送。安全

更强的安全性

  • 多个用户和客户端程序能够经过过程对基础数据库对象执行操做,即便用户和程序对这些基础对象没有直接权限。 过程控制执行哪些进程和活动,而且保护基础数据库对象。 这消除在了单独的对象级别授予权限的要求,而且简化了安全层。
  • 在经过网络调用过程时,只有对执行过程的调用是可见的。 所以,恶意用户没法看到表和数据库对象名称、嵌入本身的 Transact-SQL 语句或搜索关键数据。
  • 使用过程参数有助于避免 SQL 注入攻击。 由于参数输入被视做文字值而非可执行代码,因此,攻击者将命令插入过程内的 Transact-SQL 语句并损害安全性将更为困难。
  • 能够对过程进行加密,这有助于对源代码进行模糊处理。

代码的重复使用

任何重复的数据库操做的代码都很是适合于在过程当中进行封装。这消除了没必要要地重复编写相同的代码、下降了代码不一致性,而且容许拥有所需权限的任何用户或应用程序访问和执行代码。服务器

更容易维护

在客户端应用程序调用过程而且将数据库操做保持在数据层中时,对于基础数据库中的任何更改,只有过程是必须更新的。 应用程序层保持独立,而且没必要知道对数据库布局、关系或进程的任何更改的状况。网络

改进的性能

默认状况下,在首次执行过程时将编译过程,而且建立一个执行计划,供之后的执行重复使用。 由于查询处理器没必要建立新计划,因此,它一般用更少的时间来处理过程。函数

存储过程的劣势

不少文章提到存储过程的可移植性差:布局

因为存储过程将应用程序绑定到 SQL Server,所以使用存储过程封装业务逻辑将限制应用程序的可移植性。若是应用程序的可移植性在您的环境中很是重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中多是一个更佳的选择。

但目前项目,是确认绑定在SQL Server数据库中,不会轻易更改,可移植性不是考虑的重点。

适用范围

依据存储过程的优点,目前能够封装成存储过程的几个数据处理:

  • 订餐系统中的提交操做
    【遇到问题】以前在作这一功能时,就受限于提交多个表增、删、改的顺序以及完成状态,利用php屡次判断数据操做的执行状态的方式不只繁琐,并且进行到其中一步发生错误,还须要把前面的数据操做撤销,不影响该次订餐操做性质。
    【解决当时】封装为存储过程,利用数据库自己的逻辑控制,一次性提交执行一次订餐提交操做。

更多文章能够来个人我的博客里面看到

欢迎来访:绵绵小站

参考文章

相关文章
相关标签/搜索