検索

ホームページ  >  に質問  >  本文

php - ユーザーバランスと売上高の違いをより効率的に見つけるにはどうすればよいですか?

user テーブルの Money はユーザーの残高で、stream テーブルの s_money はユーザーによって生成されたフローです。理論的には SUM(s_money) == お金、障害が発生したと仮定して、テーブル内の異なるデータを見つけるにはどうすればよいでしょうか?以下の図に示すように、ID=3 のユーザー。

補足: ユーザー テーブルの情報とユーザーの総売上高を確認する必要があります。

として

<テーブル> <頭> ID 名前 お金 SUM(s_money) 3 z 150 100 <時間>

ユーザー テーブルとストリーム テーブルを別々にクエリし、array_diff_assoc を通じて設定された差異を見つけてください。しかし効率は比較的低いです。

測定されたユーザー テーブルには 23,434 個のデータがあり、ストリーム テーブルには 361,024 個のデータがあります。合計 3.5 秒から 4 秒かかります。より効率的な方法はありますか?

<時間>

ユーザーテーブル:

<テーブル> <頭> ID 名前 お金 <本体> 1 長 50 2 W 100 3 Z 150

ストリームテーブル:

<テーブル> <頭> ID ユーザーID s_money <本体> 1 1 -50 2 1 100 3 2 -10 4 2 110 5 3 -10 6 3 110 <時間>

現在、userID にはインデックスが付けられており、実際のクエリ時間は 0.3 秒以内に向上しています。
オンライン環境は未検証なので使えるかわかりません

我想大声告诉你我想大声告诉你2793日前597

全員に返信(1)返信します

  • 黄舟

    黄舟2017-05-16 13:14:08

    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);

    返事
    0
  • キャンセル返事