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

PHP & Base de données Discussion :

Lenteur pour exécuter un requête SQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 56
    Points
    56
    Par défaut Lenteur pour exécuter un requête SQL
    Bonjour

    Voila, J'ai une requête SQL qui est très lente. Dans mon fichier php, la requête mets 27 secondes a être executé et sous phpMyAdmin, elle mets seulement 0.5s. Voila mon bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $db = mysql_connect("127.0.0.1", "toto", "titi")
    $dbb = mysql_select_db("inventaire")
    echo $requete = "SELECT `ipTelnet`,interfaces,interfaces.adresseMAC,interfaces.date FROM `interfaces` INNER JOIN `switch` INNER JOIN `connexions` ON interfaces.idSwitch = switch.idSwitch AND interfaces.adresseMac REGEXP \"".$pc."\" AND switch.ipTelnet = connexions.switchOuIP AND connexions.numInterfaces NOT REGEXP interfaces.interfaces ORDER BY `date` DESC";
    $db2 = mysql_query($requete);	
    $donnees = mysql_fetch_array($db2);			
    echo $donnees[0]."<br>";
    echo $donnees[1]."<br>";
    echo $donnees[2]."<br>";
    echo $donnees[3]."<br>";
    Cette requête me retourne 1 seul enregistrement.
    Donc si quelqu'un a une idée de ce temps de réponse très élevé dans mon script php.
    Je suis sous Windows XP et easyPHP1.8

    Merci

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    c'est pas une petite requete deja donc niveauu temps je pense que c'est normal qu'elle soit longue maintenant faut voir ce quetu appel long !

    Ensuite il y a peut etre qu'un seul enregistrement corespondant a ta requete tu as essayé celle ci dans phpMyadmin ?
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 56
    Points
    56
    Par défaut
    J'ai essayé ma requête sous phpMyAdmin, elle me retourne 1 seul enregistrement comme je le souhaite et la requête est exécuté en 0.59s. Dans mon fichier php, elle est exécuté en 27 secondes
    Images attachées Images attachées  

  4. #4
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    ton fichier php ne contient que ce que tu as mis plus haut ?
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Comment mesures-tu tes 27 secondes ? Si tu veux être comparable avec phpMyAdmin, il faut un code de ce genre-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    list($usec0, $sec0) = explode(" ", microtime());
    mysql_query... ;
    list($usec1, $sec1) = explode(" ", microtime());
    $duree = (float)$usec1 + (float)$sec1 - (float)$usec0 - (float)$sec0 ;
    echo "<p>La requête a duré $duree seconde(s).</p>" ;
    Par ailleurs, ton REGEXP sans aucun métacaractère doit perdre pas mal de temps inutilement. Ceci serait sans doute plus rapide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    interfaces.adresseMAC LIKE '%0123fbadcf3%'
    Pour ton NOT REGEXP, je ne sais pas ce qu'il y a dans interfaces.interface, mais s'il n'y a pas non plus de méta-caractères, tu gagnerais du temps à utiliser un NOT LIKE.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #6
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 56
    Points
    56
    Par défaut
    Pour calculer mon temps d'exécution, voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function microtimestamp() {
        list($msec, $sec) = explode(' ', microtime());
        return ((float) $sec + (float) $msec) * 1000000;
    }
    if($db = mysql_connect("127.0.0.1", "root", "sva")) //Ouverture de la connexion a la base de données
    {
       if($dbb = mysql_select_db("inventaire"))     //Selection de la base "inventaire"
       {
            $start = microtimestamp();
    	echo $requete = "SELECT `ipTelnet`,interfaces,interfaces.adresseMAC,interfaces.date FROM `interfaces` INNER JOIN `switch` INNER JOIN `connexions` ON interfaces.idSwitch = switch.idSwitch AND interfaces.adresseMac LIKE '%".$pc."%' AND switch.ipTelnet = connexions.switchOuIP AND connexions.numInterfaces NOT REGEXP interfaces.interfaces ORDER BY `date` DESC";
    	$db2 = mysql_query($requete);	
    	$end = microtimestamp();
     
    	$donnees = mysql_fetch_array($db2);			
    	echo "<br>".$donnees[0];
    	echo "<br>".$donnees[1];
    	echo "<br>".$donnees[2];
    	echo "<br>".$donnees[3];
    	echo "Recherche effectué en ".(($end-$start)/1000000)." sec";	
       }
    }
    En remplacent le REGEXP par LIKE, la fonction est exécuté en 0.3 secondes dans mon script. Y'a peut être un bug dans php lorsqu'il y a 2 REGEXP dans une requête. Enfin, j'en sais rien mais maintenant, ça marche .

    Merci

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

Discussions similaires

  1. exécuter deux requêtes SQL à partir d'un bouton de commande
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/12/2006, 17h57
  2. [SQL] Sprintf ou concaténation pour créer les requêtes SQL?
    Par EvilAngel dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/09/2006, 17h08
  3. [MySQL] Afficher le temps mis pour executer une requête SQL
    Par micatmidog dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/09/2005, 11h23
  4. Recherche ibrairie pour éxécuter des requêtes SQL via C++
    Par daemon dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 14/06/2004, 10h28

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