J'ai un problème pour regler une requête somme toute assez simple ;-)
J'arrive à avoir précisément ce que je veux mais ma requête prend beaucoup trop de temps (~45s)
Je pars d'une table comprenant 40000 lignes et 70 champs (varchar, date, int, enum)
Ma méthode est bourrine mais c'est la seule façon dont j'ai pu avoir mes lignes doublons (les deux) Y a-t-il moyen d'optimiser le machin ?
CREATE TEMPORARY TABLE doublontmp /*table regroupant toutes les entrées du fichier table1 ayant le couple e_nom,e_ddn identiques*/ SELECT e_num, COUNT(*), e_nom, e_ddn FROM table GROUP BY e_nom, e_ddn HAVING COUNT(*) > 1;
CREATE TEMPORARY TABLE doublontable1 /*table qui contient les doublons e_num de la table doublontmp*/ SELECT table1.e_num, table1.e_nom, table1.e_ddn FROM table1,doublontmp WHERE table1.e_nom=doublontmp.e_nom AND table1.e_ddn=doublontmp.e_ddn AND table1.e_num<>doublontmp.e_num;
SELECT * /*requete qui ordonne et affiche tous les e_num differents et les exporte dans un csv */ FROM table1, doublontable1 WHERE doublontable1.e_nom=table1.e_nom AND doublontable1.e_ddn=table1.e_ddn GROUP BY table1.e_num INTO OUTFILE 'doublons.csv' FIELDS TERMINATED BY ';';
Marsh Posté le 30-09-2013 à 21:08:10
Bonjour,
J'ai un problème pour regler une requête somme toute assez simple ;-)
J'arrive à avoir précisément ce que je veux mais ma requête prend beaucoup trop de temps (~45s)
Je pars d'une table comprenant 40000 lignes et 70 champs (varchar, date, int, enum)
Ma méthode est bourrine mais c'est la seule façon dont j'ai pu avoir mes lignes doublons (les deux)
Y a-t-il moyen d'optimiser le machin ?
CREATE TEMPORARY TABLE doublontmp /*table regroupant toutes les entrées du fichier table1 ayant le couple e_nom,e_ddn identiques*/
SELECT e_num, COUNT(*), e_nom, e_ddn
FROM table
GROUP BY e_nom, e_ddn HAVING COUNT(*) > 1;
CREATE TEMPORARY TABLE doublontable1 /*table qui contient les doublons e_num de la table doublontmp*/
SELECT table1.e_num, table1.e_nom, table1.e_ddn
FROM table1,doublontmp
WHERE table1.e_nom=doublontmp.e_nom
AND table1.e_ddn=doublontmp.e_ddn
AND table1.e_num<>doublontmp.e_num;
SELECT * /*requete qui ordonne et affiche tous les e_num differents et les exporte dans un csv */
FROM table1, doublontable1
WHERE doublontable1.e_nom=table1.e_nom
AND doublontable1.e_ddn=table1.e_ddn
GROUP BY table1.e_num
INTO OUTFILE 'doublons.csv' FIELDS TERMINATED BY ';';
Merci !