存储过程的优缺点是什么


Posted in 面试题 onJanuary 10, 2015
优点:
1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了一个替换位置。
2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划-- 实际上是 Microsoft SQL Server为在存储过程中获取由 T-SQL 指定的结果而必须采取的步骤的记录。)缓存改善性能。
……..但sql server新版本,执行计划已针对所有 T-SQL 批处理进行了缓存,而不管它们是否在存储过程中,所以没比较优势了。
3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。
4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用 (RPC) 处理服务器上的存储过程而提高性能。RPC 封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。
5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。
6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。
7.更好的版本控制,通过使用 Microsoft Visual SourceSafe 或某个其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过程。
8.增强安全性:
a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;
b、提高代码安全,防止 SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数);
c、SqlParameter 类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。
缺点:
1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。
2.可移植性差
由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择。

Tags in this post...

面试题 相关文章推荐
PHP中如何创建和修改数组
May 02 面试题
Java和Javasciprt的区别
Sep 02 面试题
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
Mar 14 面试题
简述数据库的设计过程
Jun 22 面试题
Ref与out有什么不同
Nov 24 面试题
什么是.net
Aug 03 面试题
逻辑链路控制协议
Oct 01 面试题
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
Nov 10 面试题
C#里面可以避免一个类被其他类继承么?如何?
Sep 26 面试题
Linux开机引导的步骤是什么
Feb 26 面试题
Ruby如何创建一个线程
Mar 10 面试题
Java面试题冲刺第十八天--Spring框架3
Aug 07 面试题
DBA数据库管理员JAVA程序员架构师必看
Feb 07 #面试题
介绍一下SQL Server里面的索引视图
Jul 31 #面试题
一组SQL面试题
Feb 15 #面试题
SQL Server里面什么样的视图才能创建索引
Apr 17 #面试题
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
Apr 28 #面试题
介绍一下sql server的安全性
Aug 10 #面试题
汇智创新科技发展有限公司
Dec 06 #面试题
You might like
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
js 窗口抖动示例
2013/09/04 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
Python中为什么要用self探讨
2015/04/14 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
Django返回json数据用法示例
2016/09/18 Python
Python实现仿射密码的思路详解
2020/04/23 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
车间班组长的职责
2013/12/13 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
入职担保书怎么写
2014/05/12 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis