Bonjour,

ma requête reste performante sur 3 à 5 000 données mais sur les tables de plus de 30 000 données (comme trsaact_fu) elle prend plus de 10 minutes.
L'objectif de cette requête est de ne garder que les données dont le numFichier est le plus bas et de supprimer les autres quand il y a doublons, triplons, etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
DELETE t1 FROM OGC.trsaact_fu AS t1, OGC.trsaact_fu AS t2  
WHERE t1.numFichier > t2.numFichier AND IFNULL(t1.NRSS, '') = IFNULL(t2.NRSS, '') 
AND IFNULL(t1.CodFiness, '') = IFNULL(t2.CodFiness, '') AND IFNULL(t1.CleRsa, '') = IFNULL(t2.CleRsa, '') 
AND IFNULL(t1.NumSeqRUM, '') = IFNULL(t2.NumSeqRUM, '') AND IFNULL(t1.DelaiDDE, '') = IFNULL(t2.DelaiDDE, '') 
AND IFNULL(t1.CodAct, '') = IFNULL(t2.CodAct, '') AND IFNULL(t1.PhasAct, '') = IFNULL(t2.PhasAct, '') 
AND IFNULL(t1.ActivAct, '') = IFNULL(t2.ActivAct, '') AND IFNULL(t1.CodExtDoc, '') = IFNULL(t2.CodExtDoc, '') 
AND IFNULL(t1.CodModif, '') = IFNULL(t2.CodModif, '') AND IFNULL(t1.RembExc, '') = IFNULL(t2.RembExc, '') 
AND IFNULL(t1.CodANP, '') = IFNULL(t2.CodANP, '') AND IFNULL(t1.NbExAct, '') = IFNULL(t2.NbExAct, '') 
AND IFNULL(t1.DateValidAct, '') = IFNULL(t2.DateValidAct, '') AND IFNULL(t1.LibAct, '') = IFNULL(t2.LibAct, '');
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
20
21
22
CREATE TABLE `trsaact_fu` (
  `NRSS` int(10) default NULL,
  `CodFiness` varchar(9) default NULL,
  `CleRsa` varchar(10) default NULL,
  `NumSeqRUM` varchar(2) default NULL,
  `DelaiDDE` varchar(3) default NULL,
  `CodAct` varchar(7) default NULL,
  `PhasAct` varchar(1) default NULL,
  `ActivAct` varchar(1) default NULL,
  `CodExtDoc` varchar(1) default NULL,
  `CodModif` varchar(4) default NULL,
  `RembExc` varchar(1) default NULL,
  `CodANP` varchar(1) default NULL,
  `NbExAct` smallint(5) default NULL,
  `DateValidAct` tinyint(3) unsigned default NULL,
  `LibAct` varchar(500) default NULL,
  `numFichier` int(1) default NULL,
  KEY `NRSS` (`NRSS`),
  KEY `CodAct` (`CodAct`),
  KEY `PhasAct` (`PhasAct`),
  KEY `idSes_trsaact_fu` (`numFichier`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Voyez-vous une autre requête pour supprimer les doublons ou des améliorations à apporter à la table ?

Edition :
Précision : la plupart des champs peuvent être à NULL ou chaîne vide. C'est pourquoi j'ai ajouté IFNULL partout.