存储过程的优缺点是什么


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...

面试题 相关文章推荐
如何写出高性能的JSP和Servlet
Jan 22 面试题
上海奥佳笔试题面试题
Nov 16 面试题
经典c++面试题六
Jan 18 面试题
使用索引有什么好处
Jul 27 面试题
广州一家公司的.NET面试题
Jun 11 面试题
WINDOWS域的具体实现方式是什么
Feb 20 面试题
什么是静态路由?什么是动态路由?各自的特点是什么?
Sep 16 面试题
linux面试题参考答案(2)
Dec 06 面试题
EJB的基本架构
Sep 22 面试题
Python中pass语句的作用是什么
Jun 01 面试题
JDBC操作数据库的基本流程是什么
Oct 28 面试题
Shell脚本如何向终端输出信息
Apr 25 面试题
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数据过滤的方法
2013/10/30 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
Pytorch之Variable的用法
2019/12/31 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
python 获取字典键值对的实现
2020/11/12 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
计算机应用专业推荐信
2013/11/13 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
教师考核评语
2014/04/28 职场文书
经典禁毒标语
2014/06/16 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
综治工作汇报材料
2014/10/27 职场文书
简历自我评价模板
2015/03/11 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
经济纠纷起诉状
2015/05/20 职场文书
标枪加油稿
2015/07/22 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
外出学习心得体会范文
2016/01/18 职场文书
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
AJAX实现省市县三级联动效果
2021/10/16 Javascript
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python