存储过程的优缺点是什么


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

面试题 相关文章推荐
你常见到的runtime exception
Sep 05 面试题
大整数数相乘的问题
Jul 22 面试题
什么是跨站脚本攻击
Dec 11 面试题
接口可以包含哪些成员
Sep 30 面试题
使用C#编写创建一个线程的代码
Jan 22 面试题
LINUX下线程,GDI类的解释
Apr 17 面试题
软件缺陷的分类都有哪些
Aug 22 面试题
UML设计模式笔试题
Jun 07 面试题
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
Dec 03 面试题
介绍一下MYSQL常用的优化技巧
Oct 25 面试题
北京振戎融通Java面试题
Sep 03 面试题
介绍一下Ruby的多线程处理
Feb 01 面试题
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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
PHP里的单例类写法实例
2015/06/25 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
PHP 图片处理
2020/09/16 PHP
jquery 选项卡效果 新手代码
2011/07/08 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
编写Python的web框架中的Model的教程
2015/04/29 Python
Python检测QQ在线状态的方法
2015/05/09 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python 读取修改pcap包的例子
2019/07/23 Python
python爬虫 正则表达式解析
2019/09/28 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
python 调整图片亮度的示例
2020/12/03 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
资产评估专业大学生求职信
2013/09/29 职场文书
活动总结模板
2014/05/09 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
结婚典礼主持词
2015/06/29 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis