Bonjour à tous,
Voilà je fais la requête suivante:
Qui me prend énormément de ressource et de temps, tellement que je suis obligé de l'arrêter !!
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
23 SELECT DESCRIPTION FROM partenaire WHERE UNB IN ( SELECT UNB FROM message WHERE ID_MESSAGE IN ( SELECT ID_MESSAGE FROM commande WHERE NADDP NOT IN ( SELECT NADDP FROM compte WHERE PAYS = 'NL' AND CODE_SUPPLIER = 'M' ) ) )
De très bon conseils m'ont été précédemment donné sur le forum mais je crois bien que je n'y arrive pas.
Je n'arrive pas à utiliser les index que j'ai mis sur mes tables, comme le montre un EXPLAIN de la requête du dessus:
Pourtant, j'ai mis les index suivants:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY partenaire ALL NULL NULL NULL NULL 109 Using where 2 DEPENDENT SUBQUERY message ALL NULL NULL NULL NULL 4925 Using where 3 DEPENDENT SUBQUERY commande ALL NULL NULL NULL NULL 18168 Using where 4 DEPENDENT SUBQUERY compte ref CODE_SUPPLIER,PAYS PAYS 2 const 479 Using where
Sur table compte: PAYS et CODE_SUPPLIER
Sur table commande: NADDP
Sur table message: ID_MESSAGE
Sur table partenaire: UNB
Voici les show create table des différentes tables:
* Table compte
* Table commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TABLE `compte` ( `ID_COMPTE` int(6) NOT NULL auto_increment, `NADDP` varchar(20) NOT NULL default '', `CODE_SUPPLIER` char(1) NOT NULL default '', `PAYS` char(2) NOT NULL default '', PRIMARY KEY (`ID_COMPTE`), KEY `CODE_SUPPLIER` (`CODE_SUPPLIER`), KEY `PAYS` (`PAYS`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
* Table message
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 CREATE TABLE `commande` ( `ID_COMMANDE` int(8) NOT NULL auto_increment, `ID_MESSAGE` int(6) NOT NULL default '0', `BGM` varchar(50) NOT NULL default '-----', `DTM137` varchar(15) default NULL, `NADBY` varchar(30) default NULL, `NADSE` varchar(30) default NULL, `NADSU` varchar(30) default NULL, `NADDP` varchar(30) default NULL, `NBLIGNES` int(4) default NULL, `DATE_RECEPTION_DOC` varchar(6) NOT NULL default '', `HEURE_RECEPTION_DOC` varchar(6) NOT NULL default '', PRIMARY KEY (`ID_COMMANDE`), KEY `NADDP` (`NADDP`), KEY `DATE_RECEPTION_DOC` (`DATE_RECEPTION_DOC`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
* Table partenaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE TABLE `message` ( `ID_MESSAGE` int(6) NOT NULL auto_increment, `UNB` varchar(30) default NULL, `UNOA` varchar(30) default NULL, `DATE` varchar(15) default NULL, `NOM` varchar(20) default NULL, `DATECREATION` varchar(20) default NULL, `HEURECREATION` varchar(6) default NULL, `TAILLE` int(10) default '0', PRIMARY KEY (`ID_MESSAGE`), KEY `ID_MESSAGE` (`ID_MESSAGE`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE `partenaire` ( `UNB` varchar(35) NOT NULL default '', `QUALIFIANT` varchar(4) NOT NULL default '', `FICHIER_SORTIE` varchar(8) NOT NULL default '', `DESCRIPTION` varchar(35) NOT NULL default '', PRIMARY KEY (`UNB`), KEY `UNB` (`UNB`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
Voilà, j'espère que vous trouverez une solution pour moi. Je pense que je n'ai pas compris quelquechose avec les index.Je suis un peu dans la m..., si vous avez une idée, je suis ultra preneur !!!
Bonne fin de matinée.
Partager