user 테이블의 Money는 사용자의 잔액이고 스트림 테이블의 s_money는 사용자가 생성한 흐름입니다. 이론적으로 SUM(s_money) == 돈, 오류가 발생했다고 가정하면 테이블에서 다른 데이터를 찾는 방법은 무엇입니까? 아래 그림과 같이 ID=3인 사용자입니다.
보충: 사용자 테이블의 정보와 사용자의 총 이직률을 찾아야 합니다.
다음과 같이
<테이블> <머리>사용자 테이블과 스트림 테이블을 별도로 쿼리하고 array_diff_assoc을 통해 설정된 차이점을 찾아보세요. 그러나 효율성은 상대적으로 낮습니다.
측정된 사용자 테이블에는 23,434개의 데이터가 있고 스트림 테이블에는 361,024개의 데이터가 있으며 총 3.5초~4초가 소요됩니다. 더 효율적인 방법이 있나요?
<시간>사용자 테이블:
<테이블> <머리>스트림 테이블:
<테이블> <머리>현재 userID가 인덱싱되어 있으며, 실제 쿼리 시간은 0.3초 이내입니다.
온라인 환경은 테스트를 거치지 않아 사용이 가능한지는 모르겠습니다
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 인덱스를 생성합니다.