首页 > 数据库 >为什么 Oracle 和 Sql Server 都能用存储过程,到了 MySQL 这却不让用!

为什么 Oracle 和 Sql Server 都能用存储过程,到了 MySQL 这却不让用!

时间:2024-12-17 09:12:36浏览次数:4  
标签:存储 Sql Server SQL MySQL 过程

在日常开展 MySQL 运维工作的过程中,常常会碰到这样一种状况。

研发部门的同学总是感到疑惑,他们经常问的一个问题是:

为什么在 Oracle 以及 Sql Server 这两种数据库里都能够使用存储过程,可一到 MySQL 这儿,却压根不让用了呢。

向 DBA 询问原因时,得到的回复往往只是说性能不行,但从来都没有详细地解释过具体是出于什么样的缘由才导致这样的情况出现。

要知道,存储过程在很多时候都起着重要的作用,它常常被用于封装业务逻辑,不仅有助于提升性能,而且还能让权限管理变得更加简便。

不过,就 MySQL 数据库而言,存储过程却没能得到广泛的应用。

接下来,这篇文章将会针对 MySQL 存储过程效率偏低的原因展开详细的剖析,同时也会对 Oracle 和 Sql Server 在实际运用当中存储过程的使用情况进行一番比较。

MySQL存储过程低效的原因

执行方式

MySQL 所采用的存储过程执行模式是逐行进行解释执行的,并非像某些其他数据库那样先经过编译然后再运行。

也就是说,在其存储过程当中的每一条 SQL 语句,都得在实际运行的过程中按顺序逐步地去进行解析以及执行操作,正是这样的执行方式,致使它在性能方面与那些预编译的存储过程相比,存在着较大的差距,性能表现要差很多。

优化器

MySQL 配备的查询优化器存在一定的局限性,具体表现为它没办法针对存储过程里包含的多条 SQL 语句开展全局优化工作,而仅仅只能对每一条 SQL 语句进行单独的处理。

这种特性使得存储过程在面对较为复杂的业务逻辑时,很难充分发挥出高效的作用,没办法达到理想的性能优化效果。

内存

当存储过程运行的时候,服务器需要对额外的一些状态信息进行维护,而且随着存储过程被调用的频率不断升高,就很有可能造成服务器内存方面的消耗变得过大,进而对整个系统的整体性能产生不良影响,使得系统的运行效率有所下降。

功能不足

MySQL 的存储过程在功能方面相对比较薄弱,它并没有配备丰富多样的错误处理机制,同时在高级编程能力方面也有所欠缺,例如在高级的事务控制以及动态 SQL 支持等这些方面都是缺失的。

由于存在这些功能上的不足,导致其在复杂的应用场景之中,很难展现出良好的应对能力,表现得有些力不从心。

调试工具

MySQL 在存储过程的开发与调试工具方面存在欠缺,没有一套完善的相关工具。而缺少这些工具的支持,使得开发人员在对复杂逻辑进行开发调试的时候会面临诸多困难,这种情况进一步对存储过程在实际应用当中的推广和使用造成了阻碍。

Oracle和Sql Server能否大量使用存储过程

Sql Server


存储过程称得上是性能优化方面极为重要的一个工具。Sql Server 为存储过程给予了很不错的支持,在其存储过程执行之前,系统会预先将它编译成为高效的执行计划。在实际的应用场景里,Sql Server存储过程有着颇为广泛的应用,具体体现如下:
  • 复杂业务逻辑封装:把涉及数据操作的相关逻辑汇聚到服务器端进行统一处理,如此一来,能够有效削减应用层代码所具有的复杂程度。
  • 减少网络传输:借助一次调用便可以完成那些较为复杂的操作,进而使客户端和服务器之间在通信方面所产生的开销得以降低。
  • 增强安全性:利用存储过程能够把底层表结构以及敏感数据隐藏起来,以此增强整体的安全性。
  • 易于维护:由于存储过程是进行集中管理的,所以当需要对业务逻辑做出更新时,操作起来会更加高效便捷。

Oracle


PL/SQL 具备强大的功能且有着极为广泛的应用范围。
PL/SQL 属于一种功能十分强大的存储过程语言,在众多企业级应用场景里都有着广泛的运用,具体体现如下:
  • 企业级事务管理:其存储过程融合了高级的事务控制功能,这种特性使其特别契合高并发的金融、银行这类对事务处理要求严苛的应用场景,能够很好地应对其中复杂的事务管理需求。
  • 复杂数据处理:当面临大数据量的计算任务以及需要进行批量操作时,PL/SQL 所展现出来的性能优势以及操作灵活性,是其他语言很难与之相媲美的,它可以出色地完成各类复杂的数据处理工作。
  • 工具支持丰富:Oracle 为 PL/SQL 提供了一整套完善的相关工具,涵盖了调试工具、用于性能优化的工具以及各类开发工具等,这些工具的存在大大降低了开发人员使用存储过程的难度,让使用过程变得更加便捷高效。

对比

 

建议

简单业务逻辑


倘若业务逻辑仅仅牵涉到较为简单的 SQL 调用,并且只需要进行少量的逻辑方面的处理工作,那么比较推荐的做法是直接在应用层对相关逻辑进行封装,而不是依靠存储过程来完成此项工作。

复杂逻辑与高性能需求

在 Sql Server 以及 Oracle 这两种数据库环境当中,要是遇到需要封装复杂逻辑的情况,存储过程会是优先选择的方案。
特别是处于高并发的应用场景之下时,存储过程在性能优化以及保障安全性这两个方面所展现出来的优势是相当显著的。

MySQL 的替代方案

就 MySQL 数据库而言,建议采用应用层代码以及经过优化的 SQL 查询来取代存储过程。
要是存在数据分析方面的业务需求,那么可以考虑把数据同步到那些更契合大数据分析的平台或者工具上去,例如 TiDB、Hadoop、ClickHouse 等等。  

标签:存储,Sql,Server,SQL,MySQL,过程
From: https://www.cnblogs.com/gdjgs/p/18611509

相关文章

  • sql优化--mysql隐式转换
    sql隐式转换在SQL中,隐式转换是数据库自动进行的类型转换,隐式转换可以帮助我们处理不同类型的数据。比如,数据表的字段是字符串类型的,传入一个整型的数据,也能够运行sql。sql隐式转换的弊端sql隐式转换,有可能会导致用不上索引,导致查询变慢。mySqlCAST()函数转换类型CAST(1A......
  • 初步了解——SQL注入之增删改注入
    增删改注入主要是insert(增)注入,delete(删)注入,update(改)注入一、insert注入1.原理:“insert注入”主要涉及到SQL的插入(insert)语句。(从下面对insert注入的举例中的脚本语言可以看出来)攻击者利用应用程序对用户输入数据的不恰当处理,通过在输入数据中插入恶意SQL代码片段,来篡改原......
  • JAVA开源毕业设计 在线文档管理系统 Vue.JS+SpringBoot+MySQL网上订餐系统
    本文项目编号T039,文末自助获取源码\color{red}{T039,文末自助获取源码}......
  • JAVA开源毕业设计 在线文档管理系统 Vue.JS+SpringBoot+MySQL网上订餐系统
    本文项目编号T039,文末自助获取源码\color{red}{T039,文末自助获取源码}......
  • docker安装mysql5.7
    1、宿主机创建映射目录mkdir-p/data/mysql/logmkdir-p/data/mysql/datamkdir-p/data/mysql/conf这里我放在了/data/mysql目录下2、拉取mysql镜像dockerpullmysql:5.7注意是5.7版本,如果是8版本操作会略有不同,下篇文章介绍安装8版本的操作。查看镜像docker......
  • sqli-labs
    sqli-labsLess-1基于错误的GET单引号字符型注入index.php分析error_reporting(0);不反馈错误isset($_GET['id'])检查($_GET['id'])参数是否设置LIMIT0,1从第一条开始记录,只取一条记录1.推测闭合方式?id=1\输入\,后面是',推测是单引号闭合输入?id=1'报错输......
  • 计算机毕业设计原创定制(免费送源码):Java+Thinkphp+MySQL PHP心理咨询预约平台的设计
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对心理健康咨询等问题,对其进行研究分析,然后开发设计出心理咨询预约平台以解决问题。心理咨询......
  • SQL进阶技巧:如何根据工业制程参数计算良品率?
    目录0问题描述1数据准备2问题分析步骤1:确定每个生产批次的制程参数是否在合格范围内步骤2:基于中间结果一计算临时良品数量步骤3:计算良品率(最终结果)3小结问题拓展:如果制程参数是动态的,如何合理的设计表模型? 0问题描述制程参数是在产品生产过程中影响产品质量......
  • 计算机毕业设计原创定制(免费送源码):Java+Springboot+MySQL 水环境检测系统的设计与实现
    摘 要在我国,水源的污染是不可忽视的问题。对于水质监测进行数据的采集工作,目前主要通过人工实现。因此,部分地区的采集工作,实施起来难度很大,比如恶劣环境和偏僻山区等地。所以,目前对于水质监测的研究,主导方向是建立更加高效完善,智能化的水质监测系统。近几年,无线传......
  • mysql9.1.0.msi的安装报错——Database_initialization_failed
    报错LogBeginningconfigurationstep:WritingconfigurationfileSavingmy.iniconfigurationfile...Savedmy.iniconfigurationfile.Endedconfigurationstep:WritingconfigurationfileBeginningconfigurationstep:UpdatingWindowsFirewallrulesA......