user テーブルの Money はユーザーの残高で、stream テーブルの 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 インデックス効果が向上します: createindex INX_stream_us on stream (user_id,s_money);