Bonjour à tous,
Voilà j'ai un gros problème.
J'ai une requête qui fonctionne bien, qui est la suivante:
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
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
Soit 14694 "possibilités" (je ne sais pas trop quel terme utilisé).
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
Mais lorsque je modifie cette requête et lui ajoute une clause, comme suit:
Alors là rien ne va plus !!!!
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![]()
![]()
![]()
Le explain me ressort:
Soit 9080418 "possibilités" !!!!
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![]()
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 !!
Partager