Bonjour à tous,

Voilà j'ai un gros problème.

J'ai une requête qui fonctionne bien, qui est la suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
SELECT msg.UNB, cmd.BGM, cmd.NBLIGNES, cmd.DATE_RECEPTION_DOC, cmd.HEURE_RECEPTION_DOC, cmd.CODE_STATUT_1, cmd.CODE_STATUT_2, cmd.TYPE_MESSAGE, part.DESCRIPTION
FROM message_in msg, commande_in cmd, compte com, partenaire part
WHERE cmd.BGM LIKE '%1252%'
AND cmd.BGM != ''
AND cmd.NADDP = com.NADDP
AND com.PAYS = 'NL'
AND com.CODE_SUPPLIER
IN (
'M'
)
AND msg.ID_MESSAGE = cmd.ID_MESSAGE
AND msg.UNB = part.UNB
un EXPLAIN de cette requête me ressort:
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 SIMPLE com ref CODE_SUPPLIER,PAYS,NADDP PAYS 2 const 474 Using where 
 
1 SIMPLE cmd ref ID_MESSAGE,BGM,NADDP NADDP 31 euredi.com.NADDP 31 Using where 
 
1 SIMPLE msg eq_ref PRIMARY,UNB PRIMARY 4 euredi.cmd.ID_MESSAGE 1   
 
1 SIMPLE part ref UNB UNB 35 euredi.msg.UNB 1 Using where
Soit 14694 "possibilités" (je ne sais pas trop quel terme utilisé).

Mais lorsque je modifie cette requête et lui ajoute une clause, comme suit:

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
 
SELECT msg.UNB, cmd.BGM, cmd.NBLIGNES, cmd.DATE_RECEPTION_DOC, cmd.HEURE_RECEPTION_DOC, cmd.CODE_STATUT_1, cmd.CODE_STATUT_2, cmd.TYPE_MESSAGE, part.DESCRIPTION
FROM message_in msg, commande_in cmd, compte com, partenaire part
WHERE cmd.BGM LIKE '%1252%'
AND cmd.BGM != ''
AND (
cmd.NADDP = com.NADDP
OR com.NADDP = cmd.NADBY
)
AND com.PAYS = 'NL'
AND com.CODE_SUPPLIER
IN (
'M'
)
AND msg.ID_MESSAGE = cmd.ID_MESSAGE
AND msg.UNB = part.UNB
Alors là rien ne va plus !!!!

Le explain me ressort:
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 SIMPLE cmd ALL ID_MESSAGE,BGM,NADDP,NADBY NULL NULL NULL 19157 Using where 
 
1 SIMPLE msg eq_ref PRIMARY,UNB PRIMARY 4 euredi.cmd.ID_MESSAGE 1   
 
1 SIMPLE part ref UNB UNB 35 euredi.msg.UNB 1 Using where 
 
1 SIMPLE com ref CODE_SUPPLIER,PAYS,NADDP PAYS 2 const 474 Using where
Soit 9080418 "possibilités" !!!!

j'ai pourtant un index sur NADBY dans commande_in.


Alors pourquoi ?? Qu'est ce qui ne va pas ??

Merci beaucoup pour vos réponses !!