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