当前位置:首页 > 网络科技 >

为什么不推荐存储过程(为什么不建议写存储过程)

来源:原点资讯(www.yd166.com)时间:2023-04-22 08:38:50作者:YD166手机阅读>>

作者:菜v菜 来源公众号:架构师修行之路(ID:jiagoushixiuxing)

一、存储过程是什么?

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

二、优势

1、可以减少程序在调用DB时候的信息传输量(其实减少的只有Request的时候)

2、存储过程是预先优化和预编译的,节省每次运行编译的时间,所以一般情况下认为存储过程的性能是优于sql语句的。

3、对调用者可以隐藏数据库的复杂性,将数据组装的过程封装。

4、参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

5、如果业务开发中,数据人员和业务代码人员是分离的,业务人员可以不用关心数据,直接调用存储过程,更加面向分层开发设计理念。

三、存储过程的劣势

1、存储过程这种“一次优化,多次使用”的策略节省了每次执行时候编译的时间,但也是该策略导致了一个致命的缺点:可能会使用错误的执行计划。

2、存储过程难以调试,虽然有些DB提供了调试功能,但是一般的账号根本就没有那种权限,更何况线上的数据库不可能会给你调试权限的,再进一步就算能调试效果也比程序的调试效果要差很多。

3、可移植性差,当碰到切换数据种类的时候,存储过程基本就会歇菜。

4、如果业务数据模型有变动,存储过程必须跟着业务代码一起更改,如果是大型项目,这种改动是空前的,是要命的。

四、为什么不推荐存储过程

以上存储过程的优缺点,你随便一下网络就可能查到,表面看来存储过程的优势还是不少的,这也说明为什么老一辈程序员有很多喜欢写存储过程。但是随着软件行业业务日益复杂化,存储过程现在在复杂业务面前其实有点有心无力。

作者在业务中并不推荐使用存储过程。

1、采用存储过程操作数据在网络数据量传输上确实比直接使用sql语句要少很多,但这通常并不是操作数据系统性能的瓶颈,在一次操作数据的过程中,假设用时100毫秒,采用存储过程节省数据传输时间0.5毫秒(就算是5毫秒),我觉得这点时间基本可以忽略。

2、存储过程是只优化一次的,这有时候恰恰是个缺陷。有的时候随着数据量的增加或者数据结构的变化,原来存储过程选择的执行计划也许并不是最优的了,所以这个时候需要手动干预或者重新编译了,而什么时候执行计划不是最优的了这个平衡点,预先无法知晓,这就导致了有些应用突然会变慢,程序员处于懵逼的状态。

3、存储过程确实可以对调用方隐藏数据库的细节,但是这种业务代码人员和数据库设计人员是两个团队的情况又有多少呢,如果真是两个团队,那业务就需要两个团队来理解和沟通,我想沟通的成本也一定很高,而且分歧更容易产生。

作者认为数据库就应该做它最擅长的事情:存储相关。我不止一次的看过把业务写在存储过程的情况,程序代码层面真是薄薄的贫血层,就是一个数据的透传。我不赞同这种写法,因为我就接手过这样的程序,令我头疼的不是业务,而是看着好几千行的存储过程熟悉业务,关键还没有调试的权限(线上更不能调试)。

一个业务系统的设计往往需要你从数据库的层面抽离出来,把主要精力放在业务模型的设计上,在程序层面体现业务逻辑,而不是把业务逻辑都交给数据层面的管理者。

前几天我排查过一个“Bug”:存储过程是输入参数是一个主键id的列表字符串,长度居然是 nvarchar(max),主要功能是根据id列表查询数据。我想说的是就算你是max的长度,也有超长的可能性发生,因为业务方传输什么参数,参数什么长度是你DB无法控制的,所以这类的业务一定要放在程序中做处理,而不是怀着侥幸心里丢给DB。

如果是抱着存储过程性能高的心态的话,我到时觉你这是误入歧途,作者认为存储过程从来都不是提高性能的关键,反而系统的架构,缓存的设计,数据一致性更是系统关键问题。

存储过程通常是一种解决方案,但是通常情况下不是唯一的解决方案,在选择存储过程作为方案前,请确保他们是正确的选择。

五、其他看法

除了本文作者的观点之外,小编还给大家整理了一下其他关于是否要使用从存储过程的观点:

观点一:

为什么不推荐存储过程,为什么不建议写存储过程(1)

观点二:

为什么不推荐存储过程,为什么不建议写存储过程(2)

观点三:

为什么不推荐存储过程,为什么不建议写存储过程(3)

观点四:

为什么不推荐存储过程,为什么不建议写存储过程(4)

首页 123下一页

栏目热文

阿里巴巴的云存储的服务器在哪里(阿里云存储是自己的技术吗)

阿里巴巴的云存储的服务器在哪里(阿里云存储是自己的技术吗)

可以说阿里巴巴是国内云计算的最早的市场践行者,也是目前国内公有云市场的最大占有者。我们通过一篇文章,向大家介绍一下阿里的...

2023-04-22 08:26:25查看全文 >>

阿里云开放存储服务(阿里云存储设置方法)

阿里云开放存储服务(阿里云存储设置方法)

9月23日,第六期阿里云存储新品发布会如约而至,带来公共云存储、混合云存储产品的最新进展与技术突破,助力用户在数字经济时...

2023-04-22 07:53:53查看全文 >>

阿里云存储现状(阿里云存储的最新发展情况)

阿里云存储现状(阿里云存储的最新发展情况)

钛媒体App 4月11日消息,在阿里云峰会上,阿里云推出对象存储预留空间产品OSS-RC,用户购买1TB/年、1PB/年...

2023-04-22 08:16:28查看全文 >>

阿里巴巴存储服务器放在哪里(阿里巴巴存储服务器有多大)

阿里巴巴存储服务器放在哪里(阿里巴巴存储服务器有多大)

刚刚刷头条看到一则消息,有网友说阿里巴巴把服务器放到湖底,这下是高科技啊!有的网友甚至说,手机掉到水中也会坏,即使是IP...

2023-04-22 07:57:37查看全文 >>

阿里云存储空间当前不可用(阿里云盘占用本地空间问题)

阿里云存储空间当前不可用(阿里云盘占用本地空间问题)

 本月10日,阿里云盘突发故障,不少用户称云盘空间全部变回了100GB。阿里云盘官方也很快作出回应称技术故障导致容量异常...

2023-04-22 08:22:26查看全文 >>

怎么设置阿里存储权限(为什么阿里禁用存储过程)

怎么设置阿里存储权限(为什么阿里禁用存储过程)

[啤酒]满怀忧思,不如先干再说!做干净纯粹的技术分享!欢迎评论区或私信交流!​ [微风]所有源码收录于 gitee,因无...

2023-04-22 07:59:59查看全文 >>

为什么不建议使用阿里代码规范(阿里开发代码规范)

为什么不建议使用阿里代码规范(阿里开发代码规范)

一个优秀的开发工程师,他的技术不仅要达到相对靠前的标准,而且平常的编程格式也应该要规范,比如代码对齐、嵌套等等,这些都是...

2023-04-22 07:57:25查看全文 >>

阿里云存储和普通存储有什么区别(阿里云常见云存储服务)

阿里云存储和普通存储有什么区别(阿里云常见云存储服务)

我们的电脑和手机平时经常会出现内存不够用的情况,这时你会怎么解决呢?相信很多人的答案都是云盘。网上的云盘软件有很多:百度...

2023-04-22 07:56:16查看全文 >>

阿里小号停止服务了吗(阿里小号领新号方法)

阿里小号停止服务了吗(阿里小号领新号方法)

从大的分类来说,风险分为三类,看得见的风险,看不见的风险,系统性的风险。 //壹//看得见的风险看得见的风险很容易理解,...

2023-04-22 08:00:18查看全文 >>

为什么禁止写存储过程(为什么不建议写存储过程)

为什么禁止写存储过程(为什么不建议写存储过程)

来源:杨洋的围脖啊 链接:https://segmentfault.com/a/1190000011138993之所以有...

2023-04-22 07:57:40查看全文 >>

文档排行