存储过程适用于你吗?

用存储过程有如下几个突出优点:

" 提高新能,减少了网络流量
" 在数据库端一点的维护(single point of maintenance )
" 抽象和概化业务逻辑,增强了一致性和安全性
" 减少了一些可能的恶意攻击的机会
" 鼓励执行计划的重用性(Encourage execution plan re-use )

如果你的应用程序能有效的利用存储过程的上述优点,那么你就应该尽量使用。但是如果你的应用要求有很高的可移植性,或者数据库的结构变动很大,不能相对稳定下来,那么你可能要试一试其他方法了。比如你现在在SQL数据库上为用户开发一个早期可行性验证程序,今后用户很可能使用MySQL或是Oracle等其它数据库,那么你就因该避免使用SQL数据库的存储过程,而使用程序内嵌的数据库操作语句。这样当你更换数据库平台的时候,可以极大的保证程序不受影响。
    另外,你还要考虑使用存储过程的技术问题。也许你和你的手下非常不熟悉存储过程编程,并且没有时间去很快掌握它。这些因素你也需要通盘考虑。另外如前所述,数据库存储过程擅长于基于集合(set-based)的操作,而不擅长基于行(row-based)的操作。如果你对存储过程没有很好的了解,而不正确的使用了它往往会导致很不好的执行性能。所以如果你决定使用存储过程,那么多花一些时间来学习它是很有必要的。使用 SET NOCOUNT ON
    在缺省情况下,存储过程返回被该存储过程影响的表的行数(Rows),然而在大多情况下,这一信息是不重要的,大多数程序也不使用这一信息。使用SET NOCOUNT ON语句将停止这一行为。这将减少一次或多次客户端和数据库间的往返(具体数量取决于这一存储过程包含有多少语句影响行数(affect rows))。通常来说,这是一个小的开销,问题不大。但是对于流量很大的应用却可能会造成比较大的影响,所以建议使用SET NOCOUNT ON。具体语法如下所示:

 

create procedure test_MyStoredProc @param1 int
as
set nocount on

不要使用 sp_ 前缀(sp_prefix)
    sp_前缀是SQL数据库的保留字,是专用于系统存储过程的。数据库的引擎会首先在主控数据库(Master Database)中寻找有这个前缀的存储过程。也就是说在搜寻完主控数据库后,如果没有发现该名称的存储过程才会搜寻用户具体适用的数据库,这显然增加了搜索的时间。如果主控数据库中有和你定义的存储过程同名的存储过程,那么主控数据库的那个将会被执行,而你的则会被忽略。

保守的使用条件参数(Optional Parameters)
    在使用条件参数的时候一定要考虑清楚。如果使用不当则很可能会严重的影响性能。如果执行不是根据传入的参数的组合的话,你就不必要使用它。你可以在存储过程中使用条件语句(conditional coding)来达到类似的效果。当然要列举所有可能的参数组合并一一给出对应的执行语句段是比较繁复和比较容易出错的。使用时一定要小心。

尽量使用输出(OUTPUT)参数
    如果你的存储过程只返回标量值(scalar data),那么使用输出参数会提高执行的效能。原因是使用使用输出参数避免了生成一个Result set对象,从而减少了开销,提高了速度。(另外你还可以使用输出参数来返回一个cursor。在什么情况下使用这个方案更有效是一个比较复杂的问题,留待以后有机会再具体讨论)

提供返回值(RETURN Value)使用返回值来回传存储过程的执行结果是一个比较好的做法。如果在你所在的开发小组中大家能事先商定一套返回值来代表不同的执行结果,那么将会极大的便利各种错误处理,并可能给前台用户显示一些更有意义的错误信息。

先使用DDL, 然后再使用DML
    如果数据库定义语句(data definition language,DDL)在数据库操作语句(data manipulation language, DML)之前,那么数据库将重新编译存储过程。这样保证DML使用的是DDL刚刚修改过的对象。所以说如果你将DDL语句统统放在DML语句之前,那么数据库只要重新编译一次存储过程。如果你将DDL和DML语句混杂在一起,那么数据库会多次编译存储过程,这样就降低了系统的效率。

使用注释(Comments)你应该注释你的T-SQL程序。这样将来不管是谁负责这些程序,他们都会更好的理解这些程序的意义和目的。写注释是一个程序员因该具备的最起码的素质。

转载于:https://www.cnblogs.com/dxxhh/archive/2005/11/18/279417.html

存储过程适用于你吗?相关推荐

  1. 存储过程和函数 PROCEDURE FUNCTION

    SQL语句执行的时候,要首先编译,然后在被执行.在大型数据库系统中,为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后,存储在数据库服务器中,用户通过指定存储过程的名字来调用执行. 具体而言 ...

  2. mysql 常见存储过程,MYSQL存储过程

    # 存储过程 存储过程是一组为了完成特定功能的预先创建并使用指定名称存储在数据库服务器上的sql语句集合,用户可以通过指定存储过程的名称并给定参数来调用并执行.存储过程是可编程的函数,在数据库中创建并 ...

  3. mysql中存储过程另存为_转: MySQL中的存储过程

    转: https://www.cnblogs.com/chenpi/p/5136483.html 阅读目录 什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类 ...

  4. java存储过程与sql语句_存储过程与SQL语句怎么选择

    应用存储过程的优点: 1.具有更好的性能 存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译, 而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以提高数据库执行速 ...

  5. MySql的存储过程介绍及语法实例操作

    阅读目录 什么是存储过程 有哪些特性 创建一个简单的存储过程 存储过程中的控制语句 存储过程弊端 什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAV ...

  6. 通用sqlserver分页存储过程

    单主键: CREATE PROC P_viewPage/**//*nzperfect [no_mIss] 高效通用分页存储过程(双向检索) 2007.5.7 QQ:34813284敬告:适用于单一主键 ...

  7. MySql的存储过程的优点与缺点

    MySql的存储过程的优点与缺点 一.存储过程优点 二.存储过程的弊端 三.总结 总结下使用存储过程的优缺点 一.存储过程优点 存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句 ...

  8. mysql存储过程的利弊_【mysql 存储过程】应用存储过程的优点与缺点

    总结下使用存储过程的优缺点 一.存储过程优点 存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并存储起来,以后当需要 ...

  9. MySQL的事务与事务隔离

    MySQL中自从引入InnoDB引擎后,在MySQL中就支持事务,事务就是一组原子性的查询语句,也即将多个查询当作一个独立的工作单元,平时通过提交工作单元来完成在事务中的相应的查询或修改,在能支持事务 ...

  10. mysql面试题总结

    mysql面试题总结 Mysql中的myisam与innodb的区别? InnoDB存储引擎的四大特性? 什么是事务? 数据库事务的四大特性? 不考虑事务的隔离性,会发生几种问题? MySQL数据库提 ...

最新文章

  1. java 命名代码检查-注解处理器
  2. python中requests库的用途-python中requests库session对象的妙用详解
  3. css img 适配尺寸_如何解决img标签下面的小空隙(附详细视频教程)
  4. 关于工业级RS485串口服务器的组网方式详解
  5. 关于安装完Node.js 出现node is not dedined 问题
  6. Fedora 中的 Yum 命令详解
  7. CHM电子书木马制作攻略
  8. Linux下使用FDDB 测试MTCNN人脸检测模型生成 ROC 曲线
  9. matlab 冒泡排序函数,Matlab排序算法-遍历排序、冒泡排序
  10. java调用企业微信接口给微信发消息
  11. UE接入过程(LTE和NR)
  12. Python -- 列表解析式习题:九九乘法表、ID号
  13. RN实现手机摇一摇功能
  14. java基本数据类型Char
  15. PHP中?是什么意思,有什么用?
  16. 8月31日下午3点半夏昕、林信良做客CSDN畅谈轻量级框架——Spring
  17. 数据结构 期末复习主观题练习题(答案版)
  18. mac terminal终端打开指定文件夹 当前文件夹打开terminal
  19. 如何自己动手为家庭做一套安防监控系统
  20. ckc交易什么意思_小白买基金,什么都不懂?100个问题带你揭秘基金神秘面纱(五)...

热门文章

  1. 手机应用宝占用了8G
  2. 包打包和解析过程 unity_Unity AssetBundle 解析 (一)AB包介绍与构建
  3. react 图表库 滚动_2019 年值得推荐的 React 可视化库
  4. python保存数组到txt_np.savetxt()——将array保存到txt文件,并保持原格式
  5. spss选择主要特征_SPSS统计作图教程:一维箱线图
  6. c++ 创建txt,写log
  7. C# OpenFileDialog 打开文件对话框 打开多文件对话框; 并获取其路径,文件名,扩展名/后缀名
  8. java过滤器流程_DRF filter 过滤器实现流程
  9. react在线文件_在线IDE开发入门之从零实现一个在线代码编辑器
  10. python转换函数使用_Python基础学习之时间转换函数用法详解