记录最近遇到的2个问题

异步任务与SQL优化
本文探讨了异步任务管理中的顺序问题,介绍如何使用async.timesSeries替代async.times以确保任务按顺序执行。同时,针对数据库查询进行了优化,通过合并SQL语句和调整表结构减少查询次数,从而提高列表加载速度。

需要异步地创建N个对象,并按照时间顺序放入集合,原本是这么写的:

async.times(maxDays, createDataGrid, createBlankGrids);

结果发现顺序没有保证,放入集合的顺序是混乱的。主要对async太自信了,想当然认为times可以保证顺序。最后发现调用错了API,如果需要保证顺序,应该调用timesSeries方法:

async.timesSeries(maxDays, createDataGrid, createBlankGrids);

另外一个问题,有个列表页面,每一行需要展示的数据散落在多个表中。一开始的做法是先从一个表中查出N条数据,然后循环取到ID,到各个表中查剩余的数据。这样当列表的记录数很多的时候,总的SQL语句会非常多,因此列表展示得很慢

最后解决的方法是:

1、把能合并的SQL语句合并

2、不能合并的语句,把字段放到主表中

其实第2个办法也是利弊参半,违反了范式,而且如果都这么做,主表的冗余字段会变得太多。但是在我们这个场景下,这种方法可以解决问题。所以有时候也不能太教条,还是要根据实际情况灵活应对


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值