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

面试题 相关文章推荐
新东网科技Java笔试题
Jul 13 面试题
利用异或运算实现两个无符号数的加法运算
Dec 20 面试题
北京一家公司的.net开发工程师笔试题
Apr 17 面试题
介绍一下木马病毒的种类
Jul 26 面试题
C#面试题问题集
Apr 02 面试题
简述安装Slackware Linux系统的过程
Jan 12 面试题
Linux开机引导的步骤是什么
Oct 19 面试题
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
Jan 13 面试题
Linux Interview Questions For software testers
Jun 02 面试题
解决方案设计综合面试题
Aug 31 面试题
如何写出好的Java代码
Apr 25 面试题
如何执行一个shell程序
Nov 23 面试题
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
Sep 17 #面试题
Oracle里面常用的数据字典有哪些
Feb 14 #面试题
一道SQL存储过程面试题
Oct 07 #面试题
创建索引时需要注意的事项
May 13 #面试题
如何查询Oracle数据库中已经创建的索引
Oct 11 #面试题
哪些情况下不应该使用索引
Jul 20 #面试题
如何在Oracle中查看各个表、表空间占用空间的大小
Oct 31 #面试题
You might like
Php图像处理类代码分享
2012/01/19 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
jquery实现的分页显示功能示例
2019/08/23 jQuery
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
Python构造函数及解构函数介绍
2015/02/26 Python
Python中的localtime()方法使用详解
2015/05/22 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
在Python中执行系统命令的方法示例详解
2017/09/14 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
python机器学习实战之树回归详解
2017/12/20 Python
简单了解python PEP的一些知识
2019/07/13 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
AJAX的优缺点都有什么
2015/08/18 面试题
公司接待方案
2014/03/08 职场文书
食品销售计划书
2014/04/26 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
2014年司法所工作总结
2014/11/22 职场文书
结婚典礼致辞
2015/07/28 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL