存储过程有什么优缺点,在什么情况下用存储过程?
一、存储过程
优点
1.运行速度:对于很简单的sql,存储过程没有什么优势。对于复杂的业务逻辑,因为在存储过程创建的时候,数据库已经对其进行了一次解析和优化。存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,所以执行速度会比普通sql快。
2.减少网络传输:存储过程直接就在数据库服务器上跑,所有的数据访问都在数据库服务器内部进行,不需要传输数据到其它服务器,所以会减少一定的网络传输。但是在存储过程中没有多次数据交互,那么实际上网络传输量和直接sql是一样的。而且我们的应用服务器通常与数据库是在同一内网,大数据的访问的瓶颈会是硬盘的速度,而不是网速。
3. 可维护性:的存储过程有些时候比程序更容易维护,这是因为可以实时更新DB端的存储过程。 有些bug,直接改存储过程里的业务逻辑,就搞定了。
4.增强安全性:提高代码安全,防止 SQL注入。这一点sql语句也可以做到。
5.可扩展性:应用程序和数据库操作分开,独立进行,而不是相互在一起。方便以后的扩展和DBA维护优化。
缺点
1.SQL本身是一种结构化查询语言,但不是面向对象的的,本质上还是过程化的语言,面对复杂的业务逻辑,过程化的处理会很吃力。同时SQL擅长的是数据查询而非业务逻辑的处理,如果如果把业务逻辑全放在存储过程里面,违背了这一原则。
2.如果需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新调用,等等,这时候估计会比较繁琐了。
3.开发调试复杂,由于IDE的问题,存储过程的开发调试要比一般程序困难。
4.没办法应用缓存。虽然有全局临时表之类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。
5.不支持群集,数据库服务器无法水平扩展,或者数据库的切割(水平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。
使用场景
存储过程一定要看情况使用,用得好系统质量上个台阶,用不好等着删库跑路。多数人不爱用,除了因为互联网业务简单没必要外,还因为mysql这方面实在太弱而且它太流行了(我见过许多有多年开发经验的人没听说过PG,Oracle和MS SQL倒是听过但太贵不值当。总之mysql让他们错过太多好东西)。
延伸阅读:
二、什么是存储过程
存储过程,百度百科上是这样解释的,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过名列前茅次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。
简单的说就是专门干一件事一段sql语句。可以由数据库自己去调用,也可以由java程序去调用。在oracle数据库中存储过程是procedure。
相关推荐HOT
更多>>MySQL中id通常使用什么数据类型呢?
一、MySQL中id通常使用什么数据类型一般都是 int 自增设置为主键如果表大的话可以设置为 龙, 或者big int例如:‘id’int unsigned not null a...详情>>
2023-10-15 22:12:14关系型数据库是什么?
一、什么是关系型数据库关系型数据库是按照关系模型组织和存储数据的数据库。它使用表格(表)的形式来表示和存储数据,每个表代表一个实体,而...详情>>
2023-10-15 21:32:39设计移动端表单有哪些注意事项?
1、分布式表单iPhone目前主要的机型屏幕尺寸在4.7-5.8英寸,android的尺寸更多一些,但是总体上来说,移动端的载体手机屏幕不大,能承载的信息...详情>>
2023-10-15 21:06:48APP开发过程中需要注意什么?
一、APP开发过程中需要注意什么1、了解需求:商家和企业在开发app的时候,首先要了解市场需求,也就是用户的需求,这点是最重要的,想要app软件...详情>>
2023-10-15 20:00:34热门推荐
为什么索引过的字段排序速度会很快,原理是什么?
沸为什么Python开发世界持续被Django统治那么久?
热Binder到底是什么?
热MySQL中id通常使用什么数据类型呢?
新关系型数据库是什么?
设计移动端表单有哪些注意事项?
开发一个生鲜商城APP软件可以解决哪些问题?
APP开发过程中需要注意什么?
图数据库的应用有哪些优点?
数据库中的视图有什么用?
数据库丢失数据的原因是什么?
Mysql、SQLite、Mongo的区别?
LayoutInflater.inflate()方法两个参数和三个参数的区别?
为什么要用flow?