Voici mon schéma de table mysql;Comment faire pour que mes requêtes mysql pour un ami se nourrissent d'une grande base de données?
- table d'état // a StatusID, userID, date, sujet, date
- table de commentaire // détient CommentID, ID utilisateur qui a posté, la date et StatusID qu'il appartient aussi
- table utilisateur// contient le nom d'utilisateur ID utilisateur et l'URL de la photo d'utilisateur
Avec ce schéma de table ci-dessus, j'ai besoin de faire ceci;
- rapide avec moins de DB interroge
- Afficher toutes les entrées d'état sur une page qui sont publiés par un utilisateur dans ma liste d'amis (peut-être jusqu'à 5.000 amis)
- Voir tous les commentaires pour chaque état entrée sous le blog approprié
- montrent un nom d'utilisateur/photo URL pour chaque poste
- d'entrée d'état montrent une URL nom d'utilisateur/photo pour toutes affiches commentaire suivant pour y commentaire
Le résultat que je suis après est similaire à myspace ou facebook où il montrera tous les messages/actions ou tout simplement de vos AMIS.
Vous pouvez même comparer CETTE page sur le débordement de pile à ce que j'essaye d'accomplir, considérer mon article comme un article de statut et toutes les réponses sur cette page seraient statut, puis dans toutes les réponses sur cette page, il montre des commentaires Sous chacun d'entre eux et ils ont tous des informations sur l'utilisateur, y a-t-il un meilleur moyen d'y parvenir sans autant de jointures et d'autres choses?
Question 1
Y at-il de toute façon mieux d'accomplir ce dont j'ai besoin? Ce n'est pas vraiment assez rapide quand il y a des millions de lignes qu'il recherche même avec des index, quelles sont mes options?
Question 2
Est-il possible de modifier cela pour montrer que le premier X ammount des commentaires sur chaque poste de statut? Et si oui, est-ce que cela accélérerait le processus puisqu'il n'aurait pas à faire autant de commentaires?
Ci-dessous la liste des amis est déjà dans la requête, la raison est que je prévois d'obtenir la liste d'amis dans un tableau et le stocker dans le cache Memcache ou APC de sorte qu'il sera 1 moins requête
Voici ma requête
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) Je vais commencer une prime sur ce dès qu'il me laisse
-vous nantie d'avoir ce tableau schéma? –
Parce que sinon, je suggérerais d'indexer vos relations utilisateur/ami à sa propre table. –
Je ne suis pas vraiment suivi, les relations d'amis est sa propre table et la table des utilisateurs est la table principale avec des informations de compte, la table de relation d'ami est des millions de rangées longues parce qu'une utilisation peut avoir beaucoup d'amis – JasonDavis