私は PHP 、 MySQL を次の目的で使用して
います 2つのテーブルが あります
- ユーザー
- users_messages
テーブル "users" には、すべてのユーザーのレコードが格納されます。
id 名前 パスワード 1 XYZ XYZ
[ここの id は実際には user_id です]
テーブル「messages」には、ユーザーが投稿したメッセージが含まれています
id user_id メッセージ 1 1 XYZ
"users" テーブルには数千のレコード (>5000)
が含まれています "users_messages" には約 100 のレコードが含まれています (変化し続けます)
すべてのユーザーのメッセージ数を取得して、表に表示しようとしています。現在、私はそれらをページネーションしようとしているので、1ページの読み込みで20人のユーザーしか必要ありません。
次のようなクエリがあります
SELECT u.username as username,u.id as id, COUNT( f.user_id ) AS no_of_messages
FROM users AS u
LEFT JOIN users_messages AS f ON f.user_id = u.id
GROUP BY u.id LIMIT 20
これは機能しますが、長い時間がかかります... 20 人のユーザーのみのメッセージ数を取得するためだけにテーブル全体をスキャンする可能性があります。
テーブル「users」の id 列は 1 から開始されません。開始はランダムですが、次のレコードから自動的にインクリメントされます。