mysql存储过程——springboot查询优化
程序员文章站
2022-04-21 13:26:14
...
存储过程简介
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。
简单理解,MySQL 存储过程是一些 SQL 语句的集合。
一个存储过程应包括:
1、过程名
2、过程参数
3、过程体
使用存储过程的优点:
1、增强SQL语言的功能和灵活性
2、较快的执行速度
3、减少网络流量
4、作为一种安全机制来充分利用
存储过程是数据库的一个重要的功能,MySQL 5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0开始支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性
存储过程的创建
DROP PROCEDURE IF EXISTS SELECT_USER;
CREATE PROCEDURE SELECT_USER (IN PARAMTER VARCHAR(40))
BEGIN
SELECT NAME FROM USER
WHERE
IF(PARAMETER IS NULL,1=1,NAME = PARAMETER);
END
传递参数的类型
-
IN
只能当做传入参数 -
OUT
只能当做传出参数 -
INOUT
可当做传入传出参数
存储过程的调用
- mysql
CALL SELECT_USER('PARAMETER')
- mybatis
<select id="SELECT_USER" statementType="CALLABLE" parameterType="java.util.Map" resultType="CLASS">
{call SELECT_USER(
#{parameter,mode=IN,jdbcType=VARCHAR}
)}
</select>
注:jdbcType类型不标注会报PAREMETERMODE IN错误
dao层传递参数类型为Map
总结:能用索引优化的,尽量不要用存储过程
1、优化sql
2、使用索引
3、分库分表——临时表
4、存储过程