ここに私のmysqlテーブルスキームです。大規模なDBの友人フィードのための私のmysqlクエリを作成するには?
- ステータステーブル// statusID、ユーザーID、日付、件名、日付を持っている
- コメントテーブル//それはあまりにも属することcommentID、掲載 ユーザーID、日付、およびstatusID を保持している
- ユーザテーブル/ /ユーザーIDのユーザー名を保持する とユーザーの写真URL
上記の表のスキームでは、これを行う必要があります。 DBの最小量を用いた高速
- は
- 表示私の友人リストにユーザから公開されているページ上のすべてのステータスエントリが(最大5,000の友人かもしれない)
- は、各ステータスのすべてのコメントを表示するに照会します適切なブログ
- 下 エントリは、すべての ステータスエントリポスト
- のユーザ名/写真のURLを表示し、次にすべて コメントのポスター用のユーザー名/写真のURLを表示するが コメント
私が後にした結果は、すべてのポスト/アクションやあなたの友人のものだけを表示するmyspaceやFacebookに似ています。
このページをスタックオーバーフローと比較して、私が達成しようとしているものと比較することもできます。自分の投稿をステータスポストとみなし、このページのすべての回答をステータスポストにしてください。それぞれの下にあり、彼らはすべてユーザー情報を持っているので、これほど多くの結合やものがなければこれを達成する良い方法はありますか?
質問1
私は必要なものを達成するためにとにかくありますか?これはインデックスがあっても検索する何百万行もの行がある場合には十分速くないのですが、私の選択肢は何ですか?
質問2
それだけで各ステータスのポストのコメントの最初のX ammountを表示するには、これを変更することは可能ですか?もしそうなら、それは多くのコメントを検索する必要がないので、スピードアップしますか?友人リストの下
がクエリに既にある、その理由は、私はそれが1以下のクエリになりますので、配列に友達リストを取得し、memcacheのか、APCキャッシュに格納する予定である
ここに私のクエリ
SELECT s.statusid, s.userid, s.statustype, s.subject,
s.datetime, c.commentid, c.statusid, c.userid,
c.comment, c.datetime, su.disp_name,
su.pic_url, cu.disp_name, cu.pic_url
FROM teststatus AS s
LEFT JOIN teststatuscomments AS c
ON s.statusid = c.statusid
LEFT JOIN friend_reg_user AS su
ON su.auto_id = s.userid
LEFT JOIN friend_reg_user AS cu
ON cu.auto_id = c.userid
WHERE s.userid =1 OR s.userid
IN (2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, // Remember this list of friend ID's
16, 17, 18, 19, 20) //can be from any ammount of ID's up to 5,000
ORDER BY s.statusid
PS)は、私は、すぐにそれは私をすることができますように、この上の恩恵を開始しますです
に参加する必要がある
満足できますか? –もしそうでなければ、ユーザー/フレンドの関係をそれ自身のテーブルにインデックスすることをお勧めします。 –
私は実際に従っていない、友人の関係は、自分のテーブルとユーザーのテーブルは、アカウント情報を持つメインテーブルです、友人の関係テーブルは、何百万の行が長いので、多くの友人を持つことができます – JasonDavis