存储过程的优缺点

存储过程的优缺点

  前段时间,在维护公司的几年前的一个项目,虽说不上是历史悠久,但也有些年头了,采用三层架构,加上存储过程的这么一个老的架构,本来这个架构也没什么问题,大部分系统都是这么干的,但是由于这个系统存储过程被滥用的问题,后期维护的时候,麻烦事就来了,任何涉及到数据库的调整,都得存储过程,实体类,SQL操作等相关的地方,都得改一通。可以说被存储过程伤的很深啊,所以今天就来总结下存储过程的优缺点。

  优点

  1. 运行速度:对于很简单的sql,存储过程没有什么优势。对于复杂的业务逻辑,因为在存储过程创建的时候,数据库已经对其进行了一次解析和优化。存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,所以执行速度会比普通sql快。    

  2.  减少网络传输:存储过程直接就在数据库服务器上跑,所有的数据访问都在数据库服务器内部进行,不需要传输数据到其它服务器,所以会减少一定的网络传输。但是在存储过程中没有多次数据交互,那么实际上网络传输量和直接sql是一样的。而且我们的应用服务器通常与数据库是在同一内网,大数据的访问的瓶颈会是硬盘的速度,而不是网速。

  3. 可维护性:的存储过程有些时候比程序更容易维护,这是因为可以实时更新DB端的存储过程。  有些bug,直接改存储过程里的业务逻辑,就搞定了。 

  4. 增强安全性:提高代码安全,防止 SQL注入。这一点sql语句也可以做到。

  5. 可扩展性:应用程序和数据库操作分开,独立进行,而不是相互在一起。方便以后的扩展和DBA维护优化。

  缺点  

   1. SQL本身是一种结构化查询语言,但不是面向对象的的,本质上还是过程化的语言,面对复杂的业务逻辑,过程化的处理会很吃力。同时SQL擅长的是数据查询而非业务逻辑的处理,如果如果把业务逻辑全放在存储过程里面,违背了这一原则。

   2. 如果需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新调用,等等,这时候估计会比较繁琐了。

   3. 开发调试复杂,由于IDE的问题,存储过程的开发调试要比一般程序困难。     

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

   5. 不支持群集,数据库服务器无法水平扩展,或者数据库的切割(水平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。

  总结

   1. 适当的使用存储过程,能够提高我们SQL查询的性能,

   2. 存储过程不应该大规模使用,滥用。

   3. 随着众多ORM 的出现,存储过程很多优势已经不明显。

   4. SQL最大的缺点还是SQL语言本身的局限性——SQL本身是一种结构化查询语言,我们不应该用存储过程处理复杂的业务逻辑——让SQL回归它“结构化查询语言”的功用。复杂的业务逻辑,还是交给代码去处理吧。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

章为忠学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值