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

面试题 相关文章推荐
C++如何引用一个已经定义过的全局变量
Aug 25 面试题
.net软件工程师应聘上机试题
Mar 10 面试题
请解释接口的显式实现有什么意义
May 26 面试题
C#中有没有运算符重载?能否使用指针?
May 05 面试题
几个Shell Script面试题
Apr 18 面试题
Linux的文件类型
Mar 07 面试题
测试时代收集的软件测试面试题
Sep 25 面试题
线程问题:wait()方法是定义在哪个类里面
Jul 07 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
Feb 16 面试题
JAVA程序员面试题
Oct 03 面试题
介绍一下Java中的static关键字
May 12 面试题
J2EE中的容器都包括哪些
Aug 21 面试题
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
Sep 17 #面试题
Oracle里面常用的数据字典有哪些
Feb 14 #面试题
一道SQL存储过程面试题
Oct 07 #面试题
创建索引时需要注意的事项
May 13 #面试题
如何查询Oracle数据库中已经创建的索引
Oct 11 #面试题
哪些情况下不应该使用索引
Jul 20 #面试题
如何在Oracle中查看各个表、表空间占用空间的大小
Oct 31 #面试题
You might like
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
采用call方式实现js继承
2014/05/20 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
three.js实现圆柱体
2018/12/30 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python使用turtule画五角星的方法
2015/07/09 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
python使用requests.session模拟登录
2019/08/09 Python
Python序列类型的打包和解包实例
2019/12/21 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
大学生专业个人学习的自我评价
2013/10/26 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
暑期教师培训方案
2014/06/07 职场文书
HR求职自荐信范文
2014/06/21 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
奔腾年代观后感
2015/06/09 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL