存储过程的优缺点个人总结
公司的系统是自主开发的,历史比较悠久,有不少是传统C/S架构,采用存储过程来处理业务逻辑。
近来做新系统的时候,我采用了三层架构,抛弃存储过程改用ORM。
有同事问及不用存储过程的理由,我想了一下,对存储过程做了如下总结。
本人经验和水平有限,总结有所偏颇,还请大家纠察。
优点
1.在生产环境下,可以通过直接修改存储过程的方式修改业务逻辑(或bug),而不用重启服务器。但这一点便利被许多人滥用了。有人直接就在正式服务器上修改存储过程,而没有经过完整的测试,后果非常严重。
2.执行速度快。存储过程经过编译之后会比单独一条一条执行要快。但这个效率真是没太大影响。如果是要做大数据量的导入、同步,我们可以用其它手段。
3.减少网络传输。存储过程直接就在数据库服务器上跑,所有的数据访问都在服务器内部进行,不需要传输数据到其它终端。但我们的应付服务器通常与数据库是在同一内网,大数据的访问的瓶颈会是硬盘的速度,而不是网速。
4.能够解决presentation与数据之间的差异,说得文艺青年点就是解决OO模型与二维数据持久化之间的阻抗。领域模型和数据模型的设计可能不是同一个人(一个是SA,另一个是DBA),两者的分歧可能会很大——这不奇怪,一个是以OO的思想来设计,一个是结构化的数据来设计,大家互不妥协——你说为了软件的弹性必须这么设计,他说为了效率必须那样设计,为了抹平鸿沟,就用存储过程来做数据存储的逻辑映射(把属性映射到字段)。好吧,台下已经有同学在叨咕ORM了。
5.方便DBA优化。所有的SQL集中在一个地方,DBA会很高兴。这一点算是ORM的软肋。不过按照CQRS框架的思想,查询是用存储过程还是ORM,还真不是问题——DBA对数据库的优化,ORM一样会受益。况且放在ORM中还能用二级缓存,有些时候效率还会更高。
缺点
1.SQL本身是一种结构化查询语言,加上了一些控制(赋值、循环和异常处理等),但不是OO的,本质上还是过程化的,面对复杂的业务逻辑,过程化的处理会很吃力。这一点算致命伤。
2.不便于调试。基本上没有较好的调试器,很多时候是用print来调试,但用这种方法调试长达数百行的存储过程简直是噩梦。好吧,这一点不算啥,C#/java一样能写出噩梦般的代码。
3.没办法应用缓存。虽然有全局临时表之类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。
4.无法适应数据库的切割(水平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。
5.精通SQL的新手越来越少——不要笑,这是真的,我面试过N多新人,都不知道如何创建全局临时表、不知道having、不知道聚集索引和非聚集索引,更别提游标和提交叉表查询了。好吧,这个缺点算是凑数用的,作为屌丝程序员,我们的口号是:没有不会的,只有不用的。除了少数有语言洁癖的人,我相信精通SQL只是时间问题。
总结
存储过程最大的优点是部署的方便性——可以在生产环境下直接修改——虽然滥用的后果很严重。
存储过程最大的缺点是SQL语言本身的局限性——我们不应该用存储过程处理复杂的业务逻辑——让SQL回归它“结构化查询语言”的功用吧。
转载于:https://www.cnblogs.com/ego/archive/2012/12/06/2804592.html
存储过程的优缺点个人总结相关推荐
- 存储过程的优缺点 (转载)
为什么要用存储过程 几个去 IBM 面试的兄弟回来抱怨:去了好几个不同的 IBM 项目组,几乎每个面试官问到数据库的时候都要问用没用过存储过程,烦人不?大家去面的程序员,又不是 DBA,以前的项目都没 ...
- oracle存储过程深入,深入了解oracle存储过程的优缺点
定义: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是 ...
- 存储过程的优缺点_普洱紧压茶与散茶的优缺点
被压制成形的普洱茶被统称为紧压茶,紧压茶是普洱茶最常见最普遍的形态,但并不意味这普洱茶就不能有散茶形式,可是普洱茶为什么要做成紧压茶呢? 这还是由普洱茶"越陈越香"的后发酵特性决定 ...
- SQL存储过程的优缺点
概要: 存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它,也可以从另一个 ...
- 数据库存储过程之优缺点
存储过程优点: 重复使用.存储过程可以重复使用,从而可以减少数据库开发人员的工作量. 减少网络流量.存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量 ...
- Oracle存储过程procedure与函数function区别
定义: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程 带有参数)来执行它. 存储过 ...
- MySQL变量,存储过程,函数,流程控制详解(小白都能懂哦)
1.系统变量 2.自定义变量 3.存储过程 4.函数 5.流程控制结构 1.系统变量 1.1系统变量的分类 系统变量:分为全局变量和会话变量 1.2系统变量的介绍 系统变量由系统提供,不是用户定义,属 ...
- 程序员过关斩将--你为什么还在用存储过程?
点击上面"蓝字"关注,带你看好电影 菜菜哥,我新接手了一个项目,看的我头疼呀 业务有这么复杂呀? 不是的,这个老项目完全是用存储过程写的,每个存储过程都好几百行 这样呀,是够头疼的 ...
- mysql存储过程语法 if_mysql存储过程语法 if
MySql存储过程 MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程, ...
最新文章
- 资源 | 100+个自然语言处理数据集大放送,再不愁找不到数据!
- ffmpeg-20160526-git-bin
- Linux文件读写机制及优化方式
- Java中生产者与消费者问题的演变
- NetDevOps — PyEZ
- php 时间 插件,PHP中Carbon日期时间处理利器详解
- 6.1 C/S 架构介绍
- 说说每月至少一次的那点事,文末有彩蛋!
- 2年工作经验进 初创公司_沟通是关键:通过两家初创公司获得的成长经验教训+找工作...
- hashmap put过程_看完还不懂HashMap算我输(附互联网大厂面试常见问题)
- 什么是决定计算机内部寄存器,问题解答之 计算机中寄存器定义,分类
- java 正则判断二进制_用正则表达式判断一个二进制数是否能被3整除
- jQuery ui widget和jQuery plugin的实现原理简单比较
- 基于卷积神经网络的微表情识别研究需要注意的一些问题【未完待续】
- COJ976 WZJ的数据结构(负二十四)
- xkcd目录_12条展示AI真相的XKCD片段
- Java 代码实现pdf转word文件 | 无损转换完整代码教程
- 浪潮java面经总结
- Visual FoxPro正式版
- .NET 通过Word模板,使用AsposeWord进行数据动态导出Word
热门文章
- Android Lint 原理及使用详解
- Git基础-删除文件 rm/git rm 命令详解
- 线性代数笔记14——行空间和左零空间
- 乱世女英雄--评程序员先驱霍珀
- An enum switch case label must be the unqualified name of an enumeration cons
- 全球直播 | 2022全球Xenomai社区大会揭露“阿凡达”背后的实时Linux内核
- WEB安全之:越权访问
- 数据与业务系列三,广告流量红利盛宴的终结
- 网络孙子兵法 黑客攻防也有三十六计
- 【前端开发】CSS BEM命名规范