Bonjour,
j'ai un problème de performance avec une base de données : la requête me permettant d'obtenir toutes les informations dont j'ai besoin fait une jointure entre 7 tables différentes (utilisation de INNER JOIN) dont la taille varie entre 112 et 12 938 633 enregistrements (environ 2M d'enregistrements en moyenne).
voici la requête que ça donne :
Cette requête doit être lancée pour chacune des 10675 lignes d'un fichiers. Sachant que le temps d'exécution de la requête varie entre 4 sec et 1 min 20 (sur une base de test dont chaque table contient 4 à 7 fois moins de données...), vous imaginez le temps total d'execution du script (si vous imaginez pas, ça prend plus de 48h...)
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 SELECT DISTINCT p.hsvirtualtag_id FROM biset_cont_tag b INNER JOIN hs_virtual_observed_tag v ON b.tagID = v.hsobservedtag_id INNER JOIN liste_prom p ON p.hsvirtualtag_id = v.hsvirtualtag_id INNER JOIN prom_used u ON p.promoter_id = u.promoter_id INNER JOIN liste_TFBS t ON u.promoter_id = t.promoter_id INNER JOIN liste_mtx m ON m.mtx_name = t.mtx_name INNER JOIN transcription_factor TF ON TF.TF_id = m.TF_id WHERE bisetID = 1036 AND b.tagID != 401805 AND TF.gene_product = 'DBT' AND contrainte = 1 AND upstream = 5000;
Je suis déjà aller sur le forum Perl, tout est optimisé de ce côté là. Maintenant, il faudrait que j'optimise la partie MySQL...
En regardant dans la doc, j'ai vu qu'il existait le partitionnement par intervalle qui pourrait peut être améliorer les perfs dans mon cas. Problème : ça existe à partir de la version 5.1 de MySQL et notre serveur est à la version 5.0 (et c'est pas moi qui m'occupe de ce serveur, ils hébergent notre base de données...).
Du coup, je me demandais si l'utilisation d'une vue pourrait améliorer le temps d'exécution dans mon cas. J'en ai jamais utilisé et je connais pas bien le principe, donc je sais pas si ça peut aller. J'ai pas trouvé de tuto sur les vues MySQL, ni de doc expliquant clairement le principe de ces vues. Du coup, si vous pouviez éclairer un peu ma lanterne en me donnant des liens vers de la doc qui m'aurait échappée ou des conseils, ça serait super cool
Merci d'avance
Partager