存储过程的优缺点个人总结

优点

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回归它“结构化查询语言”的功用吧。

优点

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回归它“结构化查询语言”的功用吧。


相关内容

  • 雨量计知识总结
  • 雨量计 1. 雨量计 雨量计(rainfall recorder):用来测量一段时间内某地区的降水量的仪器(降雪量的测 量则需要使用雪量计 ).常见的有虹吸式和翻斗式两种.( 1994年12月18日,中国首台光学雨量计问世.) 大部分的雨量计都是以毫米作为测量单位,有时候测量结果也会以英寸或厘米作为 ...

  • 秘书技能期末复习指导 第二部分工作要求
  • 3、介绍出现失误时仍应沉着应付 4、自我介绍 二、名片设计与名片接递方法 1、名片是让新结识的朋友记住你的姓名、地址和电话号码等的一种有效办法。 2、一张形象、效果俱佳的名片通常包括以下几项内容: (1)公司标志、商标或公司的徵记;(2)姓名;(3)职务;(4)公司名称;(5)公司地址;(6)电话号 ...

  • 信息系统分析与设计知识点总结
  • 1. 一个计算机系统开发成功的关键在于对问题的理解和描述是否正确 2. 系统:是由相互联系和相互制约的若干组成部分结合成的.具有特定功能的有机整体 3. 系统的特性(选择):系统的整体性 系统的层次性 系统的目的性 系统的稳定性 系统的突变性系统的自组织性 系统的相似性 4. 信息系统:基于计算机技 ...

  • 信息技术第一册教案
  • 一. 畅游信息海洋 1.1 信息及其特征 教学内容:信息与信息社会.信息及其特征 教学目的:了解信息技术的基本涵义和主要特征,知道人们获取信息的基本途径,增强信息意识. 教学重点:信息的特征 课时安排:二课时 教学过程: 一.导入:在我们的日常生活中,信息无处不在.在广播.电视和报刊杂志中,信息是人 ...

  • 新职员转正述职报告
  • 深圳市迪菲特科技股份有限公司 述职报告 生产工程师:*** 时 间:2011年5月25日 整体思路 开篇 实习期工作总结 自我评价 工作体会 工作规划与展望 致谢 开篇 首先,感谢公司为我搭建了一个学以致用的平台,给我提供一个实现自身价值的机会. 感谢各位领导.同事对我实习期间工作的检阅. 借助这个 ...

  • 计算机科学概论重点
  • <计算机科学概论 >知识梳理 1.1 学生应具备的素质和能力 •5个方面的能力 –自学能力 –自控能力 –创新能力 –表达能力 –组织能力 1.1 学生应具备的素质和能力 •计算机专业人才的"专业基本能力"归纳为四个方面: 一是计算思维能力:二是算法设计与分析能力:三 ...

  • 关于数据加密的重要性及各种方法的区别
  • 关于数据加密的重要性及各种方法的区别 文件加密的重要性: 有些同学以为,自己既不是影视明星,又不是恐怖分子,不需要采用文件加密之类的工具,那就大错特错啦.俺大致介绍一下,文件加密的用武之地. 1.防范失窃 这年头,笔记本电脑.平板电脑越来越流行,而这类便捷的移动设备,也增加了丢失的概率.一旦你的移动 ...

  • 软件工程导论(第六版)课后习题答案
  • 第一章 一.什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机是指在计算机软件开发.使用与维护过程中遇到的一系列严重问题和难题.它包括两方面:如何开发软件,已满足对软件日益增长的需求:如何维护数量不断增长的已有软件. 软件危机的典型表现: (1) 对软件开发成本和进度的估计常常很不准 ...

  • 档案利用的工作程序
  • 档案利用的工作程序 是开发和直接提供档案,满足利用者的档案需求的工作. (1)熟悉库藏 (2)分析利用需求 (3)选择档案利用方式 (4)获取档案 (5)提供档案 文书审核的工作程序 对文件草稿从内容到形式所做的全面检查和修正工作. (1)明确审核范围 (2)确定是否需要行文 (3)审核文书内容 ( ...