Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2011, 20h09   #1
Invité de passage
 
Inscription : août 2009
Messages : 21
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 21
Points : 1
Points : 1
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 :
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 :
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.
kazabandi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 10h53   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
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 ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 13h16   #3
Invité de passage
 
Inscription : août 2009
Messages : 21
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 21
Points : 1
Points : 1
Voici une capture de mes tables


Je vient d'ajouter des indexes sur la clause "R.ndi=I.ndiFT", mais c'est lent encore.
kazabandi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 17h50   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Montre le résultat de la requête suivante stp:

Code :
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

Citation:
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 ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h25.


 
 
 
 
Partenaires

Hébergement Web