存储过程

一个人想着一个人 提交于 2020-04-06 21:05:31
 
存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,存储在数据库中。
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL 语句每执行一次就编译一次,以使用存储过程可提高数据库执行速度,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3.存储过程可以重复使用,可减少数据库开发人员的工作量

4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权



相对于直接使用SQL 语句,在应用程序中直接调用存储过程有以下好处: 

(1)减少网络通信量。 
一个存储过程在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
(2)执行速度更快。 
1.在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统中的执行计划。
2.执行存储过程要比直接执行sql花费更多(检查权限等)     
其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。 
(3) 分布式工作。 

应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。

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

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

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

 

缺点: 

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

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

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

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

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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!