php - 如何比较高效的求出用户余额与流水的差异数据?

 _西兰花_ 发布于 2022-11-28 06:16

user表中money为用户余额,stream表中s_money为用户产生的流水。理论上SUM(s_money)==money,假设出现故障,如何查出表中存在差异的数据?如下图中ID=3的用户。

补充:需要查出user表中的信息,以及该用户的流水总和

IDnamemoneySUM(s_money)
3z150100

尝试分别查询user,和stream表,通过array_diff_assoc求差集。但是效率比较低。

实测user表23434条数据,stream表361024条数据,总共耗时3.5s-4s。有比较高效的方法吗?


user表:

IDnamemoney
1L50
2W100
3Z150

stream(流水)表:

IDuserIDs_money
11-50
21100
32-10
42110
53-10
63110

目前给userID建立索引,性能翻了好几倍,实测查询0.3s以内。
线上环境未测试,不懂能不能吃的消

1 个回答
  • selectt1.id,t1.name,t1.money,t2.s_moneyfromusert1,(selectuserID,sum(s_money)s_moneyfromstreamgroupbyuserID)t2wheret1.id=t2.userid;
    可以建立联合索引效果会更好:createindexINX_stream_usonstream(user_id,s_money);

    2022-11-28 06:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有