存储过程和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...

面试题 相关文章推荐
2019年Java 最常见的 面试题
Oct 19 面试题
怎样从/向数据文件读/写结构
Nov 23 面试题
链表面试题-一个链表的结点结构
May 04 面试题
什么是表空间(tablespace)和系统表空间(System tablespace)
Feb 25 面试题
什么是重载?CTS、CLS和CLR分别做何解释
May 06 面试题
描述RIP和OSPF区别以及特点
Jan 17 面试题
接口的多继承会带来哪些问题
Aug 17 面试题
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
Oct 15 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
Jul 24 面试题
如何提高MySql的安全性
Jun 19 面试题
程序员经常用到的UNIX命令
Apr 13 面试题
Delphi CS笔试题
Jan 04 面试题
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
Sep 17 #面试题
Oracle里面常用的数据字典有哪些
Feb 14 #面试题
一道SQL存储过程面试题
Oct 07 #面试题
创建索引时需要注意的事项
May 13 #面试题
如何查询Oracle数据库中已经创建的索引
Oct 11 #面试题
哪些情况下不应该使用索引
Jul 20 #面试题
如何在Oracle中查看各个表、表空间占用空间的大小
Oct 31 #面试题
You might like
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
植物选择:Botanic Choice
2017/02/15 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
经典优秀个人求职信分享
2013/12/12 职场文书
公司培训欢迎词
2014/01/10 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
公司股份合作协议书
2014/12/07 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
Python实现socket库网络通信套接字
2021/06/04 Python