2010-08-04 11 views
3

Dans mon application Web, je veux savoir quels amis d'un utilisateur sur Twitter sont déjà présents sur le système ... Actuellement, je suis en train d'obtenir la liste des identifiants Twitter de l'utilisateur suivant (API Twitter renvoie les ID 5000 à la fois), et de faire:SELECT IN pour un grand ensemble

SELECT userId FROM users WHERE userId IN (COMMA_SEPARATED_LIST_OF_IDs); 

je ne me sens pas à l'aise au sujet de cette requête, parce que la table des utilisateurs augmente, cela pourrait se révéler être un goulot de bouteille. Je ne veux pas non plus m'optimiser prématurément, alors y a-t-il un autre moyen de le faire?

Mise à jour: J'utilise MySQL.

+1

Quelle base de données utilisez-vous? –

+0

Voulez-vous vraiment dire * combien * ou voulez-vous dire * qui *? –

+0

Je voulais dire qui, édité la question. – jack33

Répondre

2

Vous pouvez créer une nouvelle table et commencer à stocker tous les identifiants Twitter suivis par vos utilisateurs. Ensuite, déterminer qui est déjà dans votre système serait une simple jointure sur les colonnes indexées. Vous pouvez utiliser l'API Twitter pour charger et mettre à jour cette table à votre discrétion.

+0

Est-ce que l'overhead de la création d'une table temporaire, effectuant la jointure, puis la supprimant mieux que d'utiliser SELECT IN (expr) où expr peut avoir jusqu'à 5000 valeurs? Je n'ai pas actuellement besoin de maintenir le tableau de suivi sur une base permanente. – jack33

+0

Je ne recommanderais pas l'option de table temporaire à chaque fois que cela est vérifié, mais vous pouvez le tester et voir comment il fonctionne. Bien que vous n'ayez pas besoin de stocker ces données de façon permanente, je pense que vous trouverez peu de raisons de ne pas les conserver. – Fosco

3

Deux approches:

  1. SELECT IN (expr) est en mesure d'avoir une expression SELECT pour expr. C'est à dire. la base de données peut gérer une grande quantité de données ici.

  2. Utilisez une jointure.

1

Je suppose que users.userId est votre clé primaire. Si c'est le cas, il sera déjà indexé, donc la recherche devrait déjà être efficace. Pensez-vous que votre COMMA_SEPARATED_LIST_OF_IDS deviendra plus que raisonnable?

+0

Twitter donne des userIds en lots de 5k au cas où l'utilisateur suivrait plus de 5000 personnes. Ainsi, COMMA_SEPARATED_LIST_OF_IDS sera au maximum de 5000 ID. – jack33

Questions connexes