存储过程和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如何与mysql建立链接
May 05 面试题
super()与this()的区别
Jan 17 面试题
介绍java中初始化块的使用
Sep 11 面试题
聚网科技C++面试笔试题
Sep 01 面试题
什么是数据抽象
Nov 26 面试题
北京泡泡网网络有限公司.net面试题
Jul 17 面试题
使用C#编写创建一个线程的代码
Jan 22 面试题
Linux面试经常问的文件系统操作命令
Oct 04 面试题
什么是组件架构
May 15 面试题
Python面试题:如何用Python来发送邮件
Mar 15 面试题
介绍一下except的用法和作用
Jan 22 面试题
DELPHI面试题研发笔试试卷
Nov 08 面试题
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
Sep 17 #面试题
Oracle里面常用的数据字典有哪些
Feb 14 #面试题
一道SQL存储过程面试题
Oct 07 #面试题
创建索引时需要注意的事项
May 13 #面试题
如何查询Oracle数据库中已经创建的索引
Oct 11 #面试题
哪些情况下不应该使用索引
Jul 20 #面试题
如何在Oracle中查看各个表、表空间占用空间的大小
Oct 31 #面试题
You might like
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
谈谈对vue响应式数据更新的误解
2017/08/01 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Django REST framework 分页的实现代码
2019/06/19 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
应届生船舶驾驶求职信
2013/10/19 职场文书
服装设计专业毕业生推荐信
2013/11/09 职场文书
学校岗位设置方案
2014/01/16 职场文书
2014年保管员工作总结
2014/11/18 职场文书
教师自荐信范文
2015/03/06 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android