Appel aux dieux du SQL, à vos claviers ! ( optimisation requête... ) - SQL/NoSQL - Programmation
Marsh Posté le 15-05-2012 à 17:50:04
Vue la syntaxe, je dirais que t'es sous Mysql.
Si c'est le cas, avant de chercher à modifier la requête (faudrait déjà nous dire ce qu'elle fait), ce qui pourrait introduire des bugs, t'as déjà plusieurs leviers :
1) utiliser EXPLAIN pour voir quels index sont utilisés par le sgbd (et donc aussi voir ceux qui sont pas utilisés). Comme ça, en réindexant les bons champs, ça pourrait grandement améliorer les perfs
2) tuner le fichier de conf de Mysql. Pour t'aider, tu peux employer le script perl http://mysqltuner.pl/mysqltuner.pl
Faut le passer sur un mysql qui est en prod depuis qq temps. Ca va te dire un peu les mariables qu'il faudrait modifier. Si tu as PhpMyAdmin, tu pourras aussi regarder les valeurs qui ne sont pas bonnes (en rouge), depuis la page d'accueil de phpmyadmin et tu vas dans "afficher l'état du serveur". Y'a fort à parier que les buffers et caches soient trop petit.
Perso, sur un serveur de prod, rien qu'en jouant avec ces 2 actions, j'ai divisé par 5 le temps d'exécution d'une requête, sans la réécrire. Mais ça ne veut pas dire que ce sera pareil pour toi, les perfs, ça varie beaucoup d'une machine à une autre et du type de requête qu'on fait + comment la BD est bien modélisée ou pas pour effectuer certains traitements...
Là, ta requête, y'a quand même vachement de LEFT JOIN et de sous-requêtes... Vue qu'il y a pas mal de LIMIT 1, t'aurais peut-être intérêt à stocker dans une table temporaire la valeur que tu remontes pour chacune des sous-requête où y'a un limit 1. Ca permettrait élaguer la taille des données sur lesquelles tu travailles en même temps.
Marsh Posté le 16-05-2012 à 11:53:34
Merci beaucoup pour ta réponse... Enfaite je suis en dev dans l'entreprise, je n'ai pas accès au Serveur en lui meme, donc pas pouvoir le tuner... Je peux juste acceder à phpMyAdmin enfaite, et optimiser la requette, je regarderai ce que tu m'as dis, je te remercie beaucoup pour ton aide Je vais y travailler et on verra
Marsh Posté le 16-05-2012 à 13:38:18
Si t'as pas accès, toi, au serveur, tu peux sans doute demander à faire modifier certaines valeurs dans le fichier de conf de mysql au service informatique qui administre le serveur. Moi, c'est comme ça que ça marche à mon boulot. Je donne les valeurs des variables qui m"intéressent, ils modifient.
Marsh Posté le 21-05-2012 à 09:46:12
Oki merci beaucoup, on a trouvé, une table n'était pas indexé... On a divisé par 30 le temps d'execution Merci encore de ton aide précieuse !
Marsh Posté le 15-05-2012 à 16:19:22
Bonjour à tous,
Je vous solicite, dieux du SQL, ou pas, pour m'aider à optimiser, une méga requête XXL... J'ai essayé mais sans grand résultats....
Toute aide est la bien venu bien entendus... JE sèche vraiment la dessus, et en production ça commence à geuler car c'est trop long ( 1h30min d'attente pour exporter un rapport .csv ) et je les comprend... Le petit problème c'est que je suis arrivé il y a 6 mois... et que le SQL je le connais a peine aussi depuis 6 mois... et je dois bosser sur cette requette qui met trop de temps à être executé...
Pour un Petit projet, la Base met 6 secondes à me sortir 29lignes... c'est déja beaucoup trop...
HELPPPPP Immense merci d'avance !
Message édité par Profil supprimé le 15-05-2012 à 16:20:37