MySQL存储过程优缺点

最近做的小项目中用到了MySQL的存储过程,因此在网上查了下存储过程的优缺点,加深了解。

先来看一下解释:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

创建存储过程

create procedure sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
以上格式还可以简写成:
create proc sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
/*注:“sp_name”为需要创建的存储过程的名字,该名字不可以以阿拉伯数字开头*/

调用存储过程

1.基本语法:exec sp_name [参数名]


优点

1.在生产环境下,可以通过直接修改存储过程的方式修改业务逻辑(或bug),而不用重启服务器。但这一点便利被许多人滥用了。有人直接就在正式服务器上修改存储过程,而没有经过完整的测试,后果非常严重。

2.执行速度快,存储过程经过编译之后会比单独一条一条执行要快。但这个效率真是没太大影响。如果是要做大数据量的导入、同步,我们可以用其它手段。

3.减少网络传输,尤其是在高并发情况下。存储过程直接就在数据库服务器上跑,所有的数据访问都在服务器内部进行,不需要传输数据到其它终端。但我们的用户服务器通常与数据库是在同一内网,大数据的访问的瓶颈会是硬盘的速度,而不是网速(可使用Redis缓存解决)。

4.方便DBA优化。所有的SQL集中在一个地方,DBA会很高兴。这一点算是ORM的软肋。不过按照CQRS框架的思想,查询是用存储过程还是ORM,还真不是问题——DBA对数据库的优化,ORM一样会受益。况且放在ORM中还能用二级缓存,有些时候效率还会更高。

 

缺点

1.SQL本身是一种结构化查询语言,加上了一些控制(赋值、循环和异常处理等),但不是OO的,本质上还是过程化的,面对复杂的业务逻辑,过程化的处理会很吃力。这一点算致命伤,即只能应用在逻辑简单的业务上

2.不便于调试。基本上没有较好的调试器,很多时候是用print来调试,但用这种方法调试长达数百行的存储过程简直是噩梦。好吧,这一点不算啥,C#/java一样能写出噩梦般的代码。

3.没办法应用缓存。虽然有全局临时表之类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。

4.无法适应数据库的切割(水平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。




  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL存储过程是在数据库服务器端创建和存储的一段可重用的代码,它可以被多个应用程序调用和执行存储过程有以下优点和缺点: 优点: 1. 提高性能:存储过程在数据库服务器端执行,减少了网络传输的开销,可以提高查询性能。 2. 代码重用:存储过程可以被多个应用程序调用和执行,避免了重复编写相同的代码,提高了开发效率。 3. 安全性:存储过程可以对数据进行权限控制,只允许特定用户或角色执行特定的操作,提高了数据安全性。 4. 减少数据传输:存储过程可以将复杂的数据处理逻辑放在服务器端执行,只将结果返回给客户端,减少了数据传输量。 缺点: 1. 学习成本高:存储过程需要使用特定的语法和语义,开发人员需要学习和掌握存储过程的使用方法。 2. 难以调试:由于存储过程是在数据库服务器端执行的,调试起来相对困难,需要使用专门的调试工具。 3. 依赖于数据库版本:不同版本的数据库对存储过程的支持程度可能有所不同,需要注意兼容性问题。 4. 难以维护:存储过程的逻辑和代码都在数据库服务器端,当需求变更或bug修复时,需要修改存储过程并重新部署,对数据库的维护和管理带来一定的复杂性。 综上所述,存储过程在某些情况下可以提供性能和安全性方面的优势,但也需要权衡其学习成本、维护复杂性和兼容性等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值