Bonjour,
Je dispose de fichiers plutôt volumineux que je dois charger dans différentes tables client réparties sur différentes opérations. Pour être plus clair, voici le processus :
1/ chargement d'un fichier brut dans une table fichierbrut
2/ chargement d'une partie de la table fichierbrut dans une table de production
Pour ne pas importer dans ma table de production des fiches déjà présentes, je vérifie que les fiches sélectionnées dans ma table fichierbrut ne sont pas déjà présentes dans ma table de production. Le critère de dédoublonnage est le n° de téléphone.
Sur une table de production relativement petite (<100.000 enregistrements), ça passe assez rapidement. Mais sur les tables + conséquentes (>700.000 enregistrements), ça rame et me provoque un timeout (plafonné à 20min) dans l'applicatif PHP qui lance la requête.
Voici l'environnement :
1/ SGBD : SQL-Server
2/ Environnement applicatif : Apache + PHP connecté au serveur SQL par pilote ODBC (je sais : "bof avec le PHP")
3/ J'ai mis un index sur le champ "telephone" de chacune des tables
Voici ma requête de pré-sélection :
Cette requête présélectionne 10000 fiches de la table FichierBrut (triées de manière aléatoire) en s'assurant que la valeur du champ téléphone n'est pas déjà présente dans la table Client
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 UPDATE FichierBrut SET Utilise=2 FROM FichierBrut f1, (SELECT TOP 10000 f.IdFicheBrut FROM FichierBrut f LEFT JOIN Client c ON f.Telephone=c.Telephone WHERE f.Utilise=0 AND c.Telephone IS NULL ORDER BY NEWID()) f2 WHERE f1.IdFicheBrut=f2.IdFicheBrut
C'est cette requête qui met beaucoup de temps à s'exécuter. Quelqu'un aurait-il une autre méthode plus rapide pour effectuer la même chose ?
Pour info :
Ensuite, j'insère ces fiches dans la table Client, je recherche un indice de fichier non encore utilisé, pour que je distingue ce segment de fichier des autres segments. Puis j'exporte ces fiches dans un fichier csv à destination d'un partenaire. Cette dernière partie est longue aussi, mais c'est juste du au fait qu'il doive écrire ligne par ligne dans le fichier. Ce n'est donc pas mon problème du jour![]()
Partager