Bonjour à tous,
J'ai encore une requête qui met des plombes à s'executer et je ne comprends pas pourquoi.... Encore un problème de performance de MySQL, ou de ma requête ?
Ma requête va chercher dans un champ le 4ème et le 5ème caractères pour le comparer à un tableau comportant n lignes. (plus concrètement, ces caractères sont des codes postaux d'établissements qu'il faut afficher ou non en fonction des critères de recherche enregistrés dans le tableau).
Création de la requête en asp :
Requête crée si je sélectionne tous les code postaux d'IDF:
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
24
25 req = "SELECT up.libelle libelle_up, up.code_aru aru_up, up.actif_tonna, sj.libelle libelle_societe FROM unites_production up, societes sj, unites_exploitation ue "+ "WHERE ue.code_aru = up.aru_ue "+ "AND up.actif = 1 "+ "AND up.actif_indus = 1 "+ "AND up.aru_societe = sj.code_aru "; if (aru_filiale != "") { req += "AND up.aru_filiale='"+aru_filiale+"' "; } if (code_type_up != "") { req += "AND up.code_type_up='"+code_type_up+"' "; } if (recherche != "") { req += "AND (up.libelle LIKE '%"+recherche+"%' OR sj.libelle LIKE '%"+recherche+"%') "; } tab_cp = str_cp.split(","); req += "AND (ue.code_aru LIKE '___"+tab_cp[0]+"_____' "; for (i=1 ; i<tab_cp.length ; i++) { req += "OR ue.code_aru LIKE '___"+tab_cp[i]+"_____' "; } req += ") ORDER BY libelle_societe, libelle_up ";
En fait c'est la clause LIKE '___**_____' qui raaaaaaaaaame.... S'il n'y a qu'un département, ça prend déjà environ 3 secondes.... Si j'essaye avec l'exemple ci-dessus, la requête n'abouti pas et je suis obligé de l'interrompre....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT up.libelle libelle_up, up.code_aru aru_up, up.actif_tonna, sj.libelle libelle_societe FROM unites_production up, societes sj, unites_exploitation ue WHERE ue.code_aru = up.aru_ue AND up.actif = 1 AND up.actif_indus = 1 AND up.aru_societe = sj.code_aru AND (ue.code_aru LIKE '___init_____' OR ue.code_aru LIKE '___95_____' OR ue.code_aru LIKE '___78_____' OR ue.code_aru LIKE '___91_____' OR ue.code_aru LIKE '___77_____' OR ue.code_aru LIKE '___92_____' OR ue.code_aru LIKE '___93_____' OR ue.code_aru LIKE '___94_____' OR ue.code_aru LIKE '___75_____' ) ORDER BY libelle_societe, libelle_up
Que faire ? à part brûler mon serveur MySQL?
Merci beaucoup,
Axel
Partager