存储过程是procedure用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
存储过程(Stored Procedure):
一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
优点(为什么要用存储过程?):
①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用
②批量处理:SQL+循环,减少流量,也就是“跑批”
③统一接口,确保数据的安全
相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
存储过程和函数存在以下几个区别:
1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。
2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。
3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。
4)存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。
--------------------------------------------------------------------------------------------------------------------
MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines,存储过程和函数的区别的简要说明参见Stored procedure vs. function。归纳如下:
- 函数只能通过return语句返回单个值或者表对象。而存储过程不允许执行return,但是通过out参数返回多个值。
- 函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。
- 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少
- 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
数据库专心做好数据存取就够了,业务都交给程序去实现!别把业务层的东西整到数据库里去。互联网基本不会用存储过程
存储过程一旦调试完成通过后就能稳定运行,这与各个业务在一段时间内是相对稳定和确定是匹配的;存储过程大大地减少了业务系统与数据库的交互,一定程度降低了业务系统与数据库的耦合,例如即使业务系统与应用系统不在同一城市,对性能的影响也可控(100条SQL语句交互一次,即使延时由同城1ms增加到异地50ms,也只是增加49ms,如果交互100次,则增加4900ms)。在互联网行业,存储过程很少使用,一个重要的原因是MySQL的广泛使用,而MySQL的存储过程的功能很弱(跟商业数据库相比);另外也跟互联网行业变化快有一定的关系。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
优化性能
这里不比较不同代码的执行效率,因为通常这不是决定系统性能的关键。
假设代码和SQL语句没有低级错误,数据库决定性能的主要是物理资源配置,表的物理结构,缓存策略,索引策略。
DBA通过优化表结构和索引,通常可以带来上百倍甚至上万倍的性能提升。对于项目的不同阶段,DBA需要不停的做这方面的分析和优化,存储过程可以使他们放心的做这件事情而不会给业务模块带来太大的冲击。
参考文档
https://www.cnblogs.com/youxin/p/3568379.html
https://www.zhihu.com/question/54408187/answer/278547740