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

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

存储过程是什么?

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

可以理解为数据库中的函数过程。

存储过程的优势

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

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

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

过程中的命令作为代码的单个批处理执行。这可以显著减少服务器和客户端之间的网络流量,因为只有对执行过程的调用才会跨网络发送。 如果没有过程提供的代码封装,每个单独的代码行都不得不跨网络发送。

更强的安全性

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

代码的重复使用

任何重复的数据库操作的代码都非常适合于在过程中进行封装。这消除了不必要地重复编写相同的代码、降低了代码不一致性,并且允许拥有所需权限的任何用户或应用程序访问和执行代码。

更容易维护

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

改进的性能

默认情况下,在首次执行过程时将编译过程,并且创建一个执行计划,供以后的执行重复使用。 因为查询处理器不必创建新计划,所以,它通常用更少的时间来处理过程。

存储过程的劣势

很多文章提到存储过程的可移植性差:

由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择。

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

适用范围

依据存储过程的优势,目前可以封装成存储过程的几个数据处理:

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

更多文章可以来我的个人博客里面看到

欢迎来访:绵绵小站

参考文章

时间: 2024-11-05 14:39:07

利用存储过程优化复杂的数据库操作的相关文章

利用SQL Profiler 追踪数据库操作

原文:利用SQL Profiler 追踪数据库操作 SQL Server 事件探查器 是一个界面,用于创建和管理跟踪并分析和重播跟踪结果. 这些事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分析或用它来重播一系列特定的步骤. SQL Server 事件探查器# Microsoft SQL Server 事件探查器 是 SQL 跟踪的图形用户界面,用于监视 数据库引擎 或 Analysis Services 的实例. 您可以捕获有关每个事件的数据并将其保存到文件或表中供以后分析. 

【SQL server初级】数据库性能优化三:程序操作优化

数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分 数据库性能优化三:程序操作优化 概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案 一.操作符优化 1. IN.NOT IN 操作符 IN和EXISTS 性能有外表和内表区分的,但是在大数据量的表中推荐用EXISTS 代替IN . Not IN 不走索引的是绝对不能用的,可以用NOT EXISTS 代替 2. IS 

利用存储过程来重命名SQL Server数据库

最近遇到一个需要在多用户模式下重新命名数据库的Case, 因为数据库可能被其他用户使用,所以直接修改可能会失败.对于此种情况,我们可以等所有用户结束使用数据库时修改,或者是将数据库切换到单用户模式下进行操作. 有时候,我们在开发过程中需要直接把生产环境的数据库拿到开发环境来测试开发.我们可以直接重命名生产环境上的数据库.这样以来,即使你有些SQL没有保存,也可以直接从原来的数据库中抓取. 有两个重要的细节我们必须注意 当重名名数据库时, filegroup的名字和数据文件名(.mdf,.ldf)

数据库性能优化三:程序操作优化

数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分 数据库性能优化三:程序操作优化 概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案 一.操作符优化 1. IN.NOT IN 操作符 IN和EXISTS 性能有外表和内表区分的,但是在大数据量的表中推荐用EXISTS 代替IN . Not IN 不走索引的是绝对不能用的,可以用NOT EXISTS 代替 2. IS 

IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架

每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换取编程速度.擅长利用轮子的程序员已经遥遥领先,不擅长利用轮子的程序员总是嫌前人发明的轮子不够圆,自己造个方轮子上路后才发现落后了. 作者:玖哥来源:51CTO|2017-10-19 16:06 移动端 收藏 分享 [51CTO.com原创稿件]每个Android 程序员都不是Android应用开发之

mysql数据库的优化、恢复等操作

1.当你的自增id主键很大时,你想让id重新到1开始自增                    请输入: truncate table 表名; 2.当你的数据库损坏时,你别慌先试试这条命令是否可以帮助你      请输入: repair table 表1,表2- 3.当你的数据表中含有varchar.text等并进行多次删除添加等操作, 会产生好多碎片空间,这回浪费资源,需要进行数据表的优化, 则可以重获碎片空间                                          

利用反射技术实现POJO的数据库操作

记得第一次写项目的时候,傻傻的数据库一张表,代码里就写一个DAO类,几张表就写几个DAO类,大量的重复代码,自己粘着都嫌烦,后来接触了Hibernate,不得不说对我们这种小白用处还是很大的,那么多的实体类,一个DAO就可以实现基本的数据库操作了,于是我用的不亦乐乎,但到底是怎么做的,从来没有考虑过,现在用这些框架已经有一段时间了,原谅我脑洞大开,想自己实现一下这种类似的功能: 在准备写之前,我们需要一些规则: 1.由实体类名,可以知道我这个类是存放在哪张表里---这里我采用的是和t_类名 2.

nodejs之利用第3方包,做数据库操作、登录页面验证案例(案例中的动态页面都是基于后端渲染的)

1.先安装第3方包 新建项目文件夹->建入口js文件->npm init 创建包管理文件 package.json ->npm install mysqljs/mysql 2.在项目入口文件来做数据库操作(数据库操作语句,其实可以去npm官网查看这个masql插件的文档) 真实的工作场景中,数据库位于一台单独的服务器上 3.mysql的sql语句的学习   4.封装操作数据库的api 5.登录页面小案例---走通前端+后端+数据库一套流程 原文地址:https://www.cnblogs

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用