Question

Je suis en train de construire une page PHP avec les données envoyées à partir de MySQL.

Est-il préférable d'avoir

  • 1 SELECT requête avec 4 jointures de table, ou
  • 4 petites SELECT les requêtes sans jointure de table;Je ne sélectionnez à partir d'un ID

Ce qui est plus rapide et qu'est-ce que le pro/con de chaque méthode?J'ai seulement besoin d'une seule ligne de chaque tables.

Était-ce utile?

La solution

Vous devez exécuter un outil de profilage si vous êtes vraiment inquiet à cause ça dépend de beaucoup de choses, et il peut varier, mais comme une règle de son mieux pour avoir moins de requêtes en cours de compilation et moins d'allers-retours à la base de données.

Assurez-vous de filtre choses aussi bien que vous le pouvez à l'aide de votre où et de le rejoindre sur les clauses.

Mais honnêtement, il n'a généralement pas d'importance, puisque vous n'allez probablement pas être frappé de tout ce dur par rapport à ce que la base de données peut faire, de sorte que si l'optimisation est votre spec, vous ne devriez pas le faire prématurément et de faire de quoi de plus simple.

Autres conseils

Lorsque vous utilisez des Jointures au lieu de plusieurs requêtes, vous permettez à la base de données pour appliquer ses optimisations.Vous sont également potentiellement récupération des lignes que vous n'avez pas besoin (si vous remplacez une jointure INTERNE avec plusieurs sélectionne), ce qui augmente le trafic réseau entre votre serveur d'application et le serveur de base de données.Même si elles sont sur la même case, c'est important.

Généralement, il est préférable d'avoir une instruction SELECT.L'une des principales raisons pour avoir des bases de données, c'est qu'ils sont rapides au traitement de l'information, en particulier si elle est dans le format de la requête.

Si il n'y a aucun inconvénient de cette approche, c'est qu'il y a certains types d'analyse que vous ne pouvez pas faire avec une grande instruction SELECT.SGBDR les puristes insistent que c'est un problème de conception de base de données, dans ce cas, vous êtes de retour à ma suggestion.

Il peut dépendre de ce que vous faites avec les données une fois que vous les récupérer à partir de la DB.Si vous utilisez chacun des quatre résultats de façon autonome, alors il serait plus logique et plus clair d'avoir quatre instructions SELECT.D'autre part, si vous utilisez les données de l'ensemble, comme pour créer un système unifié de ligne dans une table ou quelque chose, alors j'irais avec la sélection unique et des Jointures.

J'ai fait un peu de PHP/MySQL, et je trouve que même pour les requêtes sur de grandes tables avec des tonnes de Jointures, la base de données est très bon à l'optimisation de l' - si vous avez des smart index.Donc, si vous êtes sérieux au sujet de la performance, commencez à lire sur l'optimisation de la requête et de l'indexation.

Je dirais 1 de la requête avec jointure.De cette façon, vous avez besoin de frapper le serveur qu'une seule fois.Et si vos tables sont jointes avec les index, il doit être rapide.

Bien sous Oracle vous voulez profiter de la requête de mise en cache, et si vous avez beaucoup de petites requêtes que vous faites dans votre traitement séquentiel, il serait sucer si la dernière requête a poussé le premier à sortir de la cache...juste à temps pour vous de faire une boucle autour et le lancer de la première requête à nouveau (avec différentes valeurs de paramètres évidemment) sur le prochain passage.

Nous avons été la construction d'un fichier de sortie XML à l'aide de Java procédures stockées et certainement trouvé le temps d'aller-retour pour chaque requête mangeaient en vie.Nous avons trouvé qu'il était beaucoup plus rapide à obtenir toutes les données en quelques requêtes que possible, branchez-le ensuite ces valeurs dans le DOM XML en tant que de besoin.

Le seul inconvénient est que le code Java est un peu moins élégant, comme l'extraction de données est maintenant à distance de son utilisation.Mais nous avons eu de générer un grand complexe fichier XML en tant que proche de zéro que possible, nous avons donc dû optimiser la vitesse.

Soyez prudent lorsque vous traitez avec une table de fusion toutefois.Il a été mon expérience que, même si une seule jointure peut être bonne dans la plupart des cas, lors de la fusion tables sont impliqués, vous pouvez exécuter dans d'étranges situations.

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