某业务现场存储过程中的多步骤执行SQL优化思路:
银利多业务场景涉及存款、大额存单、理财、基金、保险、贵金属多个统计指标,有18条SQL语句。又分别统计7天交易,15天交易,30天交易,60天交易,共计18*4=72条SQL语句。是现场比较典型的应用开发场景,特点是步骤多,但每步执行时间都不长。 条件如下:
优化思路是将7天交易,15天交易,30天交易,60天交易通过case when判断出明细一次性汇总,避免相同的SQL分多步骤反复执行。
举例有以下明细表:
通过case when 判断明细数据是否属于交易周期,
对于统计个数类的,满足条件标记为1,不满足条件标记为0
case when d_time between @startdate and adddate(@startdate, 7) then 1 else 0 end as p7_cnt,
对于统计求和的,满足条件标记为数值列值,不满足条件标记为0
case when d_time between @startdate and adddate(@startdate, 7) then AMT else 0 end as p7_amt,
例如通过SQL获得的自'2023-10-01'起不同交易周期的明细结果如下:
汇总结果如下:
可通过1条SQL语句按id分组统计7天、15天、30天、60天交易的笔数和金额总和。