2010-11-20 4 views
0

J'ai vu des questions similaires sur une jointure complexe vs plusieurs requêtes, auquel cas les réponses sont toujours "ça dépend" haha, mais je me demandais si je pouvais obtenir des informations sur la direction. J'espère que ce ne sera pas trop compliqué à expliquer.plusieurs jointures par rapport à des requêtes individuelles mises en cache?

J'affiche une page qui doit extraire des informations d'environ 3-4 tables différentes. Disons que nous avons une personne qui pourrait appartenir à un club, et ce club a beaucoup d'événements. Je devrais tirer des informations à partir du club, de la personne, de l'information de l'événement, etc.

Maintenant je les ai dans 3-4 tables séparées, mais ma table des événements a un grand nombre de colonnes que je suis jolie Certes, ce n'est pas normalisé, mais je le garde de telle sorte que je n'ai pas à faire plus de 3 à 5 jointures maximum. À l'heure actuelle, il semble que ce soit correct avec un petit ensemble de données, mais je ne peux pas m'empêcher de me demander si les séparer en 3-4 requêtes individuelles et en mettant en cache les résultats de certains d'entre eux serait plus rapide? La table des événements est mise à jour assez souvent, donc je peux voir que cela est invalidé, mais l'organisation et la table des utilisateurs ne le font pas, donc je peux voir que cela profite à cette dernière solution. Alors, que recommanderiez-vous? En outre, ma table d'événements contient un grand nombre de colonnes, dont certaines stockent des données fréquemment mises à jour ou de grandes colonnes de texte pour stocker des données de modèle clé/valeur sérialisées. Serait-il sage de partitionner cela à une autre table, donc j'ai des données "générales" et ensuite des données d'événement qui sont fréquemment mises à jour? Merci pour toute aide.

+0

Avez-vous essayé d'utiliser 'EXPLAIN' pour avoir une idée générale de l'endroit où se trouve le goulot d'étranglement? – stillstanding

Répondre

1

Sans test sur votre ensemble de données et de tables et sur la fréquence à laquelle ils sont utilisés, il n'y a pas de bonne réponse.

Il semble que vous ayez une bonne compréhension des avantages et des inconvénients de chacun. Si vous disposez d'un espace pour la mise en cache d'un grand nombre de données ou si plusieurs clubs accèdent à certains clubs, il est préférable de mettre chaque élément en cache.

Si vous avez déjà configuré memcached, je vous recommande de le séparer et de mettre en cache chaque requête. Il faudra un peu de travail supplémentaire pour invalider les caches corrects lorsque les données changent, mais la mise en cache est une bonne idée pour les performances de toute façon et cela se fait tôt.

Je ne m'inquiéterais pas trop à ce sujet maintenant. L'optimisation prématurée finira juste par vous coûter beaucoup de temps quand vous avez d'autres choses que vous pouvez faire. Commencez simplement à travailler, puis, si vous rencontrez des problèmes de performance plus tard, vous pouvez profiler votre application et vous concentrer sur l'optimisation des endroits qui en ont vraiment besoin.

+0

merci pour votre contribution – Jeff

Questions connexes