Bonjour à tous,
Voila j'ai à des requêtes assez lourdes avec des jointures dans tous les sens et lorsque j'essaye de regrouper le resultats de certaines, Mysql est à la traine.
J'ai essayé en passant par des table temporaire, cela marche mieux mais devient de suite plus fastidieux à gérer.
exemple :
Peut prendre 1 minute pour me remonter 34000 resultats
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT DISTINCT tr.idd FROM table_data as tr WHERE tr.idd IN (SELECT DISTINCT tr.idd FROM table_data as tr INNER JOIN table_enr as trr ON tr.id_link = trr.id INNER JOIN table_data as tz ON tr.idd = tz.idd INNER JOIN table_data as t1 ON tr.idd=t1.idd WHERE tz.id_group ='' AND ( ( t1.key_name LIKE 'email%' AND t1.key_name !='' ) ) AND t1.val!='' AND trr.profil='1' AND trr.acces='1' AND trr.etat='1' AND trr.id_link='0' UNION SELECT DISTINCT tr.idd FROM table_data as tr INNER JOIN table_enr as trr ON tr.id_link = trr.id INNER JOIN table_data as tz ON tr.idd = tz.idd INNER JOIN table_data as t1 ON tr.idd=t1.idd WHERE tz.id_group !='' AND ( ( t1.key_name LIKE 'mobile%' AND t1.key_name !='' ) ) AND t1.val!='' AND trr.profil='1' AND trr.acces='1' AND trr.etat='1' AND trr.id_link='0' )
alors que :
Ne va me prendre à peine 2 secondes, avec le même résultat
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 temporary table eee SELECT DISTINCT (tr.idd) FROM table_data as tr INNER JOIN table_enr as trr ON tr.id_link = trr.id INNER JOIN table_data as tz ON tr.idd = tz.idd INNER JOIN table_data as t1 ON tr.idd=t1.idd WHERE tz.id_group = '' AND ( ( t1.key_name LIKE 'email%' AND t1.key_name !='' ) ) AND t1.val!='' AND trr.profil='1' AND trr.acces='1' AND trr.etat='1' AND trr.id_link='0'; Create temporary table ddd SELECT DISTINCT (tr.idd) FROM table_data as tr INNER JOIN table_enr as trr ON tr.id_link = trr.id INNER JOIN table_data as tz ON tr.idd = tz.idd INNER JOIN table_data as t1 ON tr.idd=t1.idd WHERE tz.id_group != '' AND ( ( t1.key_name LIKE 'mobile%' AND t1.key_name !='' ) ) AND t1.val!='' AND trr.profil='1' AND trr.acces='1' AND trr.etat='1' AND trr.id_link='0'; SELECT idd from eee UNION select idd from ddd;
Et ça c'est pour le rapprochement de deux sous-requetes, il risque d'en y avoir bien plus...
Donc avez-vous déjà rencontré ce genre de soucis, pour qu'elle solution avez vous optés ? Changer de SGDB ? passage obligatoire de table temporaire ? Arrêter de travailler
Merci d'avance pour votre aide,
FlashPapa
Partager