Question

Structure de base de données:

id  galleryId                 type     file_name       description
1   `artists_2010-01-15_7c1ec`  `image`  `band602.jpg`   `Red Umbrella Promo`
2   `artists_2010-01-15_7c1ec`  `image`  `nov7.jpg`      `CD Release Party`
3   `artists_2010-01-15_7c1ec`  `video`  `band.flv`      `Presskit`

Je vais tirer des images pour une partie d'une application, des vidéos sur un autre, etc. Est-il préférable de faire plusieurs requêtes MySQL pour chaque section comme ceci:

$query = mysql_query("SELECT * FROM galleries WHERE galleryId='$galleryId' && type='image');

... Ou devrais-je construirai un tableau associatif et boucle juste à travers le réseau encore et chaque fois que je dois utiliser le jeu de résultats?

Merci pour les pensées.

Était-ce utile?

La solution

Cela dépend de ce qui est plus important: la lisibilité ou la performance. J'attends une seule requête et préremplissage des tableaux PHP serait plus rapide à exécuter, car les connexions de base de données sont chers, mais une simple requête pour chaque section est beaucoup plus lisible.

Sauf si vous savez (et pas seulement l'espoir) que vous allez obtenir une énorme quantité de trafic que je vais pour des requêtes distinctes et inquiète pour l'optimisation si elle ressemble à ça va être un problème. À ce moment-là, il y aura d'autres choses que vous aurez envie de faire de toute façon, comme la construction d'une couche d'accès aux données et l'ajout d'une mise en cache.

Autres conseils

Si par « sections » signifient des pages individuelles séparées (requêtes HTTP séparées) que les utilisateurs peuvent voir, je suggère requête par type au besoin. Sur une page où il n'y a que des ensembles de données d'image, vous avez vraiment pas besoin de chercher les données vidéo définies par exemple. Vous ne serez pas vraiment économiser beaucoup de temps tout aller chercher, puisque vous connecterez à la base de données pour chaque page a frappé de toute façon (je suppose.)

Si par « sections » signifient différentes parties d'une page, puis aller chercher tout à la fois. Cela vous fera gagner du temps sur l'interrogation (une seule requête.)

Mais en fonction de la taille de votre ensemble de données, vous pourriez avoir des ennuis avec la limite de mémoire de PHP pour tout l'interrogation, cependant. Vous pouvez alors essayer d'augmenter la limite de mémoire, mais si cela échoue aurez probablement revenir à une requête par type.

En utilisant l'approche requête par type déplace une partie de la charge de calcul au serveur de base de données, que vous ne demanderez et aller chercher ce que vous avez vraiment besoin. Et vous n'avez pas à écrire du code pour filtrer et trier vos résultats. Le filtrage et le tri est quelque chose que la base de données est généralement mieux que le code PHP. Si possible, activez le cache de requêtes de MySQL, qui permettra d'accélérer ces requêtes beaucoup plus que tout ce que vous pouvez écrire en PHP.

Si vos données sont tous issus d'une table, je ne le ferai une requête.

Je suppose que vous construisez une seule page avec une section pour les photos, une section pour la vidéo, une section pour la musique, etc. Écrivez vos résultats de retour de la requête triés par type de média - itérer toutes les photos, toutes les vidéos, puis toute la musique.

Il vaut mieux avoir plusieurs requêtes. Chaque fois que vous exécutez une requête toutes les données sont en train de sortir et chargé en mémoire. Si vous avez 5 types différents, cela signifie que chaque page de ce type chargement 5 fois plus de données qu'il doit faire.

Même avec juste un à la fois, vous allez probablement vouloir commencer paginant avec LIMIT / OFFSET requêtes assez rapidement si vous avez plus de 100 mais beaucoup vous pouvez afficher raisonnablement sur une page à la fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top