Bonjour à tous, j'ai un soucis avec ma BD, je vais essayer d'exposer le plus clairement possible mon problème, étant donné que je ne suis pas un expert.
Dans ma BD, j'ai une table,
avec comme PK SPECT_ID en auto-increment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE T_MA_TABLE ( SPECT_ID INTEGER NOT NULL, SPECT_MEASURE_DATE TIMESTAMP NOT NULL, SPECT_ANSWER_TYPE TINYINT(1) NOT NULL, S_CODE VARCHAR(15) NULL, B_NAME VARCHAR(40) NULL, X_NAME VARCHAR(40) NULL, CHAIN_NAME VARCHAR(40) NULL SITE_NAME VARCHAR(40) ) TYPE=INNODB;
J'ai plusieurs indexs sur cette table et notamment les 2 suivants :
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 CREATE INDEX IND_SPECT_X_DATE ON T_MA_TABLE ( S_CODE , X_NAME , SPECT_MEASURE_DATE ); CREATE INDEX IND_SPECT_B_DATE ON T_MA_TABLE ( S_CODE , B_NAME , SPECT_MEASURE_DATE );
Maintenant, j'exécute cette requête :
Cette requête me retourne plus ou moins 1500 lignes en qqs secondes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT * FROM maBD.t_ma_table t WHERE X_NAME = "TOTO" AND SPECT_ANSWER_TYPE = "0" AND S_CODE = "TATA" AND SITE_NAME LIKE "%" AND CHAIN_NAME LIKE "%" AND SPECT_TYPE LIKE "%" ORDER BY SPECT_MEASURE_DATE;
Maintenant si j'exécute cette requête :
Cette requête me retourne plus ou moins 1500 lignes, MAIS en 10 minutes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT * FROM maBD.t_ma_table t WHERE X_NAME = "TITI" AND SPECT_ANSWER_TYPE = "0" AND S_CODE = "TUTU" AND SITE_NAME LIKE "%" AND CHAIN_NAME LIKE "%" AND SPECT_TYPE LIKE "%" ORDER BY SPECT_MEASURE_DATE;
Alors ne comprenant pas, j'ai exécuté ces 2 requêtes avec "EXPLAIN" devant pour voir ce qu'il se passait .
-> Pour la 1ère requête, MySQL utilise le bon index (le 1er) puisque je renseigne le champ X_NAME.
-> Pour la 2nde requête MySQL n'utilise pas le bon index (le 2nd)... Alors que seuls les 2 paramètres X_NAME et S_CODE changent...
Sachant que ces requêtes sont générées par mon programme java, et que donc je ne peux faire un truc du style USE_INDEX mon_bon_index, que me conseilleriez-vous de faire pour rétablir la situation??
D'avance merci pour vos tuyaux![]()
Partager