统计已经消费的金额,因为数据库的已经消费的条数很多,做统计信息如果全部拉入内存计算,会出现问题,造成请求的接口很慢。
如下图所示的做法:
override fun getConsumeAmountByTenantId(tenantId: Long): BigDecimal=this.list(
QueryWrapper<SubAccountRecord>().allEq(mapOf("tenant_id" to tenantId, "transaction_type" to TransactionType.ORDER_DEDUCTION))
).sumOf { it.amount!! }
通过sql进行统计,这样请求会相对快一些
/**
* 查询租户已花费金额
* 消费笔数太多,sum计算修改为数据库中计算
*/
override fun getConsumeAmountByTenantId(tenantId: Long): BigDecimal{
val queryWrapper: QueryWrapper<SubAccountRecord> = QueryWrapper<SubAccountRecord>()
queryWrapper.select("sum(amount) as sum_amount ")
queryWrapper.allEq(mapOf("tenant_id" to tenantId, "transaction_type" to TransactionType.ORDER_DEDUCTION))
val sumAmountMap=this.getMap(queryWrapper)?: return BigDecimal.ZERO
return sumAmountMap["sum_amount"].toString().toBigDecimal()
}
执行的sql为
SELECT sum(amount) as sum_amount FROM sub_account_record WHERE deleted=0 AND (tenant_id = 1436952636891992064 AND transaction_type = 'EXPIRED_DEDUCTION')
本文探讨了一种解决大数据量下统计消费金额问题的方法,通过将SQL查询直接应用于数据库,避免了将所有记录加载到内存,从而提升接口响应速度。重点介绍如何使用QueryWrapper实现和执行的SQL优化策略。
1045

被折叠的 条评论
为什么被折叠?



