0

私の興味のある質問は以下の通りです

    SELECT COUNT(a.id) 
      FROM users AS a 
RIGHT JOIN date_log AS b 
        ON a.id = b.user_id 
     WHERE
           b.meeting_date BETWEEN '2012-06-01' 
                      AND DATE_ADD('2012-06-01', INTERVAL 1 MONTH) 
  GROUP BY a.id

ただし、大規模なデータベースからデータを選択しようとすると、速度が遅すぎます。重複したIDを削除するためのクエリに「groupby」という用語を追加しました。

この仕事をするためのより良い方法はありますか?

4

2 に答える 2

1

カウントだけが必要な場合は、このクエリを左結合にして、MySQLが実行するのに時間がかかるかどうかを確認できます(実際にRIGHT JOINがどのように実行されるかはわかりませんが、非効率的な方法で想像できます左と比較して...

SELECT users.id, count(users.id) as user_count
FROM 
  date_log
  LEFT JOIN users ON date_log.user_id = users.id
WHERE
  date_log.meeting_date BETWEEN '2012-06-01' AND DATE_ADD('2012-06-01', INTERVAL 1 MONTH)
GROUP BY users.id
于 2012-07-08T17:32:43.103 に答える
1

まず、date_log.user_idとmeeting_dateのインデックスが設定されていることを確認します。

それでは、グループの代わりに「個別」を使用することを検討しましたか?

Select count(distinct a.id)
于 2012-07-08T17:22:42.183 に答える