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 :

Problème rapidité sur une db [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 34
    Points : 17
    Points
    17
    Par défaut Problème rapidité sur une db
    Bonjour,

    je suis confronté à un problème un peu génant. Je viens de terminer une application de callcenter pour un client. Le but est d'importer des listes de clients depuis un CSV vers une base de donnée.

    Les CSV peuvent être très grand (30 000 -50 000 lignes). L'importation et la suppression des listes se fait de manière rapide et correcte lorsque nous avons à faire à de petits fichiers. Si le fichier excède les 10 000 lignes le temps devient beaucoup trop long.

    Il se peut donc que le code soit mal optimisé mais apèrs avoir tout bien revérifier, je ne pense pas que se soit ca.

    Le sytème que j'utilise pour l'impotation est le suivant:
    J'utilise des objets appelés "bean" contenant des méthodes get set afin de sauvegarder un enregistrement. Je fais des boucles et charge ces bean pour chaque champs.

    Je les places ensuite sur la session et les récupères plus tard pour l'insertion.

    Ce qui est vraiement bizzare; c'est la suppression de la liste qui prend un temps énorme (presque 1 heure -> si elle est de petite taille c'est presque instantané). Pourtant voici le petit bout de code qui prend autant de temps:

    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
     
    function supprimeListe($pk_liste){
    		$sql = 'select PK_CLIENT from T_CLIENT where PK_LISTE='.$pk_liste; 
      		$req = mysql_query($sql) or die('<p class="standard">Erreur SQL : <br />'.$sql.'</p>');
    		while($data = mysql_fetch_assoc($req)){ 
    			$sql2 = 'delete from T_ASSURANCE where PK_CLIENT='.$data['PK_CLIENT']; 
      			$req2 = mysql_query($sql2) or die('<p class="standard">Erreur SQL : <br />'.$sql.'</p>');
    			$sql2 = 'delete from T_RDV where PK_CLIENT='.$data['PK_CLIENT']; 
      			$req2 = mysql_query($sql2) or die('<p class="standard">Erreur SQL : <br />'.$sql.'</p>');
    			$sql2 = 'delete from T_CHAMP where PK_CLIENT='.$data['PK_CLIENT']; 
      			$req2 = mysql_query($sql2) or die('<p class="standard">Erreur SQL : <br />'.$sql.'</p>');
    		}
    		$sql = 'delete from T_CLIENT where PK_LISTE='.$pk_liste; 
      		$req = mysql_query($sql) or die('<p class="standard">Erreur SQL : <br />'.$sql.'</p>');
    		$sql = 'delete from T_LISTE where PK_LISTE='.$pk_liste; 
      		$req = mysql_query($sql) or die('<p class="standard">Erreur SQL : <br />'.$sql.'</p>');
    		$sql = 'delete from T_LIAISON_CAMP_LISTE where PK_LISTE='.$pk_liste; 
      		$req = mysql_query($sql) or die('<p class="standard">Erreur SQL : <br />'.$sql.'</p>');
    }
    Tout devrait se passer rapidement, je ne vois pas quel est le pb, y a t'il qqc à réglé dans mysql??

    Si qqu peut m'aider, je vous remercie.

    Merci de m'avoir lu jusqu'au bout

    @+

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    essaye en supprimant la boucle, c'est pas impossible que ça soit ça qui fasse ralentir, en utilisant ce genre de requète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql2 = 'delete from T_ASSURANCE where PK_CLIENT in (select PK_CLIENT from T_CLIENT where PK_LISTE='.$pk_liste.')';
    et en supprimant la première

    comme le dit le message suivant, comme c'était avant, ton nombre de requètes différait en fonction du nombre de client obtenue avec ta requète.
    dans ta boucle tu fais 3*"nb client" requète
    en gros pour 10 client, tu fais 30 requète dans ta boucle, pour 100, 300...
    alors qu'avec la requète que je te propose tu n'aura plus de boucle et tu fera seulement 3 requètes.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Je ne vois pas ce qui t'étonne.

    Si tu as 10 lignes à supprimer, tu auras 10 accès à la base et 10 traitements de celle-ci.
    Si tu en as 10 000 tu auras 1 000 fois plus de traitements à faire

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Jolie azraelster, ca corrige plutot bien mon pb merci bcp

    La liste ce supprime en 2 min environ, c'est acceptable vu le nombre d'enregistrements.

    thx

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

Discussions similaires

  1. Problème exportation sur une autre machine
    Par sylar42 dans le forum Visual C++
    Réponses: 2
    Dernier message: 09/05/2008, 03h07
  2. Problème return sur une méthode
    Par root76 dans le forum Langage
    Réponses: 3
    Dernier message: 07/03/2008, 10h43
  3. ASP petit problème à propos sur une boucle if
    Par nicodu59 dans le forum ASP
    Réponses: 2
    Dernier message: 02/08/2007, 10h21
  4. Problème SELECT sur une vue sous FB 2.0
    Par Pepere72 dans le forum SQL
    Réponses: 18
    Dernier message: 20/10/2006, 10h55
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

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