php - 如何比较高效的求出用户余额与流水的差异数据?
我想大声告诉你
我想大声告诉你 2017-05-16 13:12:08
0
1
553

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

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

ID name money SUM(s_money)
3 z 150 100

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

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


user表:

ID name money
1 L 50
2 W 100
3 Z 150

stream(流水)表:

ID userID s_money
1 1 -50
2 1 100
3 2 -10
4 2 110
5 3 -10
6 3 110

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

我想大声告诉你
我想大声告诉你

모든 응답(1)
黄舟

select t1.id,t1.name,t1.money,t2.s_money from user t1,(select userID,sum(s_money) s_money from stream group by userID) t2 where t1.id=t2.userid;
Union 인덱싱 효과가 더 좋아집니다. 스트림(user_id,s_money)에 INX_stream_us 인덱스를 생성합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!