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 :

Optimation d'une requette sql


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut Optimation d'une requette sql
    Bonsoir,
    J'explique mon problème, j'en ai 6 fichiers csv téléchargés chaque jour (de très grande taille --> 2,4 Go)
    je les charge dans 6 tables temporaires( qui ne contiennent aucune clé car je les utilise comme tampon), puis j'en ai 4 tables de la structure de ma base de données, je les remplisse sélectivement à partir des 6 tables temporaires.

    Par exemple j'en ai une table "tv_ref_iad" que je doit remplir à partir de la table temporaire 'referentiel_hispeed', puis je doit lui faire un update de certains champs à partir d'autre table temporaires en testant selon un champ commun.
    Au début j'ai pensé à des requette séparées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    insert into `tv_ref_iad` (`ndiFT`,`ndi9t`,`option`,`ipIAD`,`profildslDslam`, `attenuationTheorique`,`aliasDslam`,`typeDslam`,`versionDslam`,`typeCarteDslam`,`technoCarte`,`typeInfraData`,`bas`,`codePostal`,`codeInsee`,`assiaLastDate`,`assiaCode`,`assiaCategorie`,`dateRealisation`,`dateFichierHispeed`)
     (SELECT `ndi`,`ndi9t`,`option`, `adresseIpIad`,`profildsl`,`attenuation`,`aliasDslam`,`typeDslam`,`versionDslam`,`typeCarteDslam`,`technoCarte`,`typeInfraData`,`bas`,`codePostal`,`codeInsee`,`assiaLastDate`,`assiaCode`,`assiaCategorie`,`dateRealisation`,`dateFichier` FROM `referentiel_hispeed` WHERE `offre` 
    LIKE '%TV%' OR `codeOffre` LIKE '%TV%')
    Cette requette permet une première insertion dans ma table tv_ref_iad(contient une clé primaire ndiFT) à partir de la table temporaire referentiel_hispeed.
    Puis je doit faire un update des autre tables, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    insert into `tv_ref_iad` (`ndiFT`,`iadModel`)
     (SELECT R.`ndi`,I.`iadModel` FROM 
    `referentiel_hispeed` R, `indicateurs_opt1` I WHERE (`offre` LIKE '%TV%' OR `codeOffre` LIKE '%TV%')
     AND R.ndi=I.ndiFT)
    ici je rajoute le champ iadModel dans ma table tv_ref_iad à partir de ma table indicateurs_opt1.
    Et là le temps de traitement est énorme.

    Aussi il ne faut pas oublier que je veux faire des update à partir des fichiers csv chaque jour...par exemple pour une nouvelle version d'un fichier csv il faut appliquer un test aussi qui supprime de ma table tv_ref_iad les ndi qui ne se trouve pas dans le nouveau fichier csv en faisant une comparaison du champ datefichichier de ma table tv_ref_iad et la table temporaire 'referentiel_hispeed' qui est remplie chaque jour à partir d'un fichier csv.
    L'environnement c'est WAMP (Mysql+php) dernière version sous Windows xp.

    Donc je demande comment optimiser mes requettes, et pourquoi pas remplir ma table tv_ref_iad par une seule requette à partir des tables temporaires.

    Merci pour vos réponses.

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Déjà si tu utilise une clause like dans une table qui contiend un grand nombre d'entrées, il ne faut pas s'attendre à des performances spectaculaires.

    Là comme ça ça me parle pas beaucoup, on peux voir les create table ?

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut
    Voici une capture de mes tables


    Je vient d'ajouter des indexes sur la clause "R.ndi=I.ndiFT", mais c'est lent encore.

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Montre le résultat de la requête suivante stp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    desc tv_ref_iad;
    show create table tv_ref_iad;
    desc referentiel_hispeed;
    show create table referentiel_hispeed;
    Egalement tu nous parle de

    6 fichiers csv téléchargés chaque jour (de très grande taille --> 2,4 Go)
    pourquoi ce volume n'est pas représenté en database ?

Discussions similaires

  1. Un filtre dans une requette SQL
    Par laklak dans le forum Bases de données
    Réponses: 1
    Dernier message: 07/01/2007, 10h21
  2. comment passer du code html dans une requette sql?
    Par vinceH31 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/11/2006, 18h10
  3. Ecrire une requette SQL sur Access
    Par Nadaa dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/05/2006, 14h32
  4. Lancer une requette sql sans que celà soit visible
    Par frechy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/02/2006, 15h42
  5. besoin d'aide sur une requette sql
    Par maxidoove dans le forum Langage SQL
    Réponses: 13
    Dernier message: 10/10/2005, 18h42

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