场景
- 有一个订单页面,要求实时性, 但是有时候查询有点慢 (1秒 – 2秒);
- 数据库架构
- 部署是一主多从, 从库读数据;
- 索引
- 观察慢查询,该走的索引都走了
- 代码逻辑
- 没有什么问题
- 数据库架构
- 代码多人开发
分析 && 解决
- 仔细分析代码, 发现有关于查询的公用的方法的调用,具体的sql
- select filed_a from A where id in {$a, $b, $c}
- select field_a from A where id in {$a}
在第二次查询中的$a的数值事实上可以从第一次查询中获得, 不需要发起数据库的查询, 这时候如果每个$id 对应的查询结果,放在缓存区中, 发起查询之前,先捞一边缓存区, 只请求没有命中的部分
效果
- 时间控制在了300ms秒之内