存储过程的优点和缺点
2016-03-30 21:16
375 查看
优点
①重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。②减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
③安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
简单讲:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
有一点需要注意的是,一些网上盛传的所谓的存储过程要比sql语句执行更快的说法,实际上是个误解,并没有根据,包括微软内部的人也不认可这一点,所以不能作为正式的优点,希望大家能够认识到这一点。
存储过程缺点
1:调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。2:移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。
3:重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。
4: 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。
相关文章推荐
- 笔记 - Java 反射
- MyEclipse安装插件代码生成器
- ARMv8架构下程序运行时栈帧布局
- 关于大型网站技术演进的思考(六)--存储的瓶颈(6)
- <string.h>
- 完成命令解析程序
- Java语言类库中几个常用的包
- .gitignore无效,不能过滤某些文件
- Java数据结构——用双端链表实现队列
- Android UI杂谈---layout_weight
- Spring 框架的 UI(IOC) 功能
- python类中的__call__、__init__、__getattr__、__setattr__、__setattr__详解
- MFC CListCtrl不响应LVN_GETDISPINFO消息
- I - Sereja and Coat Rack
- 关于大型网站技术演进的思考(七)--存储的瓶颈(7)
- php curl
- Android App整体架构设计的思考
- 在spring中使用webservice(Restful风格)
- 文件系统/fdisk命令创建分区
- codeforces 337A