1、背景

1.1、车辆详情页展示商机列表产生异常。

img

1.2、慢查询SQL

img

1.3、SQL执行计划

1
2
3
4
5
6
7
8
9
10
11
SELECT
count( 0 )
FROM
remind_bill t1
LEFT JOIN remind_bill_ext_service t2 ON t1.pk_id = t2.remind_bill_id
WHERE
t1.is_deleted = 0
AND t1.group_id = 10546443563683618514
AND t1.remind_type = 0
AND t1.state IN ( 0, 2 )
AND t1.car_id = 10546443563706551334

img

1.4、接口调用频率高

img

img

1.5、接口时序图

img

2、优化方案

2.1、分析

  • 时序图第9步可以看出,查询的mysql,且使用关联查询。
  • 从1.3执行计划可以看到,走到了索引,扫描行数68146。
  • 目前服务提醒主表数据5467597条,加上扩展表,一共5467597*2 = 10,935,194。千万级数据。
  • 目前提醒信息已经接入搜索:customer_remind

2.2、方案

  • 切换时序图中第9步中方法(ServiceRemindBillBizReadService#queryServiceRemindBillList),走ES查询。
  • 从ES获取提醒单id
  • 再根据提醒单id查询主表及扩展表填充数据

3、影响

车辆详情页,商机管理数据展示。