IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

[Performance] LEFT JOIN vs SELECT dans une boucle (PHP)


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 123
    Points : 85
    Points
    85
    Par défaut [Performance] LEFT JOIN vs SELECT dans une boucle (PHP)
    Je me pose une question

    Prenons deux tables Mysql liées entre elles par une relation du type à chaque ligne de la table 1 correspond plusieurs lignes de la table 2

    Que vaut il mieux faire ?

    SELECT T1.champ1, (.....) T1.champN, T2.champ1, (....) T2.champ2 FROM Table1 AS T1 LEFT JOIN Table2 AS T2 ON T1.champX = T2.champY WHERE T1.champZ=Valeur référence

    autrement dit une requète qui générera pas mal d'info redondantes

    ou bien

    SELECT T1.champ1, (.....) T1.champN FROM Table1 AS T1 WHERE T1.champZ=Valeur référence

    puis dans une boucle en PHP par exemple lancer autant de requètes que de valeurs différences de T1.champX

    SELECT T2.champ1, (....) T2.champ2 FROM Table2 AS T2 WHERE T2.ChampY = ValeurCourantedeT1.champX

    La première solution ne génère qu'un seul accès à la base de donnée, mais consomme à mon avis plus de mémoire (à cause des info redondantes). La seconde est la plus économe en mémoire (je pense), mais nécessitent de nombreux accès à la base...

    Ma question est peut être ridicule, mais j'ai hérité d'une habitude de développement dans un environnement à très faibles ressources mémoires, où chaque octet compte, et où économiser 10 octets de RAM est très important si c'est possible (microcontroleurs).

    Dans le cas de MySQL faut il mieux faire une économie de mémoire ou une économie de connexions ? Y a t il un cas où priviligié l'une ou l'autre ?

    Merci d'avance

  2. #2
    Membre éclairé
    Avatar de efficks
    Inscrit en
    Septembre 2005
    Messages
    712
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 712
    Points : 776
    Points
    776
    Par défaut
    La méthode avec une seule requête est plus performante selon moi car tu monopolisera qu'une seule fois le serveur de base de données. De plus, la base de données est optimisé pour ce genre de requêtes alors que ton processus de plusieurs requêtes gérer en PHP va prendre beaucoup plus de temps et de ressources système selon moi.
    Avant de poster : FAQ, tutos, rechercher, google, ... Après :
    Merci

  3. #3
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Je confirme, la méthode avec une seule requête est bien meilleure. Et on ne parle pas encore de temps réseau ou de temps pris par le parseur SQL.

    Dans la première requête, le serveur est heureux, et pour peux qu'il y ait des index, il sera aux anges !
    Pensez au tag

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    Merci,

    En ce qui concerne les index, je met systématiquement un index sur tous les champs utilisés dans une clause WHERE ON ou ORDER BY

  5. #5
    Membre éclairé
    Avatar de efficks
    Inscrit en
    Septembre 2005
    Messages
    712
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 712
    Points : 776
    Points
    776
    Par défaut
    Je ne suis pas sûr que cela vaille la peine d'ajouter un index sur TOUS les champs qui sont dans un Where et encore moins dans une ORDER BY. Cela est supposé améliorer la vitesse de recherche mais d'un autre côté ton index sera tellement gros que tu vas perdre de la performance.
    Avant de poster : FAQ, tutos, rechercher, google, ... Après :
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre un SELECTED dans une boucle
    Par cdossert dans le forum Langage
    Réponses: 2
    Dernier message: 20/04/2013, 14h57
  2. [MySQL] Select dans une boucle while
    Par voyageurdumonde dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/04/2011, 00h35
  3. Récupérer les coordonnées de plusieurs DIV dans une boucle PHP
    Par renaud26 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/11/2009, 10h23
  4. [MySQL] Requetes SQL dans une boucle PHP
    Par Siteac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2006, 14h35
  5. [Smarty] Affectation dans une boucle PHP
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/08/2006, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo