存储过程的优缺点是什么


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数据运算类型都有哪些
Nov 05 面试题
方法名是否可以与构造器的名字相同
Jun 04 面试题
Java基础知识面试要点
Jul 29 面试题
什么是事务?为什么需要事务?
Jan 09 面试题
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
Dec 12 面试题
开放系统互连参考模型
Jun 29 面试题
介绍一下常见的木马种类
Nov 15 面试题
类和结构的区别
Aug 15 面试题
静态成员和非静态成员的区别
May 12 面试题
如何提高MySql的安全性
Jun 19 面试题
J2EE面试题大全
Aug 06 面试题
一套Delphi的笔试题二
May 11 面试题
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/05/04 PHP
PHP数组实例详解
2016/06/26 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python中split方法用法分析
2015/04/17 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
Python面向对象类的继承实例详解
2018/06/27 Python
python实现屏保计时器的示例代码
2018/08/08 Python
Python玩转Excel的读写改实例
2019/02/22 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
英语专业毕业生自荐信范文
2013/12/31 职场文书
国际贸易个人求职信范文
2014/01/04 职场文书
融资租赁计划书
2014/04/29 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
项目负责人任命书
2014/06/04 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
放牛班的春天观后感
2015/06/01 职场文书
Python的三个重要函数详解
2022/01/18 Python