存储过程和sql语句的优缺点


Posted in 面试题 onJuly 02, 2014
答:存储过程的优缺点:
优点:
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 的中间层中可能是一个更佳的选择。
Sql语句灵活,可移植性强,查询速度比存储过程慢些

Tags in this post...

面试题 相关文章推荐
PHP经典面试题
Sep 03 面试题
Linux中如何设置Java环境变量(Ubuntu)
Jul 24 面试题
Ibatis中如何提高SQL Map的性能
May 11 面试题
经典c++面试题五
Dec 17 面试题
CSMA/CD介质访问控制协议
Nov 17 面试题
SQL注入攻击的种类有哪些
Dec 30 面试题
介绍一下linux的文件系统
Mar 20 面试题
Solaris操作系统的线程机制
Jul 28 面试题
英智兴达软件测试笔试题
Oct 12 面试题
EJB3.1都有哪些改进
Nov 17 面试题
EJB3推出JPA的原因
Oct 16 面试题
J2EE中常用的名词进行解释
Nov 09 面试题
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
Sep 17 #面试题
Oracle里面常用的数据字典有哪些
Feb 14 #面试题
一道SQL存储过程面试题
Oct 07 #面试题
创建索引时需要注意的事项
May 13 #面试题
如何查询Oracle数据库中已经创建的索引
Oct 11 #面试题
哪些情况下不应该使用索引
Jul 20 #面试题
如何在Oracle中查看各个表、表空间占用空间的大小
Oct 31 #面试题
You might like
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
PHP检测用户语言的方法
2015/06/15 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
JS array 数组详解
2009/03/22 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
elementui的默认样式修改方法
2018/02/23 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
Python中pygame安装方法图文详解
2015/11/11 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
2014道德模范事迹材料
2014/02/16 职场文书
保安队长职务说明书
2014/02/23 职场文书
班子四风对照检查材料
2014/08/21 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
基于JavaScript实现年月日三级联动
2021/06/22 Javascript
Redis特殊数据类型bitmap位图
2022/06/01 Redis