|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Inscription : juin 2008 Messages : 105 ![]() |
salut,
Voici ma requête. Je veux l'optimiser pour diminuer le temps d’exécution : Code :
The vs_Service_Details does this: Code :
Code :
|
||||||
|
|
00
|
|
|
#2 |
|
Nouveau Membre du Club
![]() Aurélien LEQUOY Inscription : février 2011 Messages : 33 ![]() |
Déjà je retirerai les requêtes imbriqués. après il faudrait que tu nous donnes la définition des tables / indexes / FK avec un échantillon de données
|
|
|
00
|
|
|
#3 | ||||
![]() ![]() |
Ouch ! Elle font mal aux yeux tes requêtes !
Généralités 1) Utilise des alias pour les tables, ça rend l'écriture et la lecture de la requête plus facile. 2) Les apostrophes inversées autour des noms de tables et de colonnes sont inutiles tant que ces noms ne sont pas des mots du langage SQL ou ne comprennent ni espace, ni caractère diacritique, ni tiret. Vue vw_Details 1) Pourquoi y a t-il un STR_TO_DATE et un DATE_FORMAT qui sont deux fonctions inverses ? Student_Service_PCAR.date_of_service est converti en format standard DATE 'aaaa-mm-jj' à partir d'une chaîne de caractères au format 'mm/jj/aaaa' alors que Student_Service_PCAR.last_update est converti au format 'mm/jj/aaaa' à partir du format standard de date. Quant à la colonne Student_Service_PCAR.transfer_date, elle n'est pas convertie ! Bizarre non ? De quel type sont ces trois colonnes ? Est ce le même type dans les deux tables Student_Service et Student_Service_PCAR ? J'aurais tendance à enlever ces formatages bizarres de cette vue, ce qui la simplifiera et rendra son exécution plus rapide. 2) Au niveau modèle de données, pourquoi y a t-il deux tables avec apparemment la même structure ? Première requête 1) Tu écris cette restriction : Code :
" où l'acompte de practitionner est égal à l'accompte de practitionner pour le pract_id envoyé par le programme. " Il me semble que ceci serait suffisant : Au passage, comme l'identifiant est en principe de type entier, inutile de mettre la valeur souhaitée entre apostrophes. 2) Juste après cette première restriction se trouve une variable $sqlqual. Que contient-elle et que vient-elle faire là ? 4) Au lieu de il vaut mieux utiliser BETWEEN en tenant compte du fait que les bornes sont incluses. Voici la requête récrite : Code :
La première des choses à vérifier lorsqu'on rencontre des problèmes de rapidité d'exécution est l'indexation des tables. Toutes les colonnes figurant dans les conditions de jointure doivent être indexées, ainsi que les colonnes figurant dans les clauses du WHERE. Ce qui peut ralentir aussi, c'est le fait que l'ORDER BY soit basé en premier sur une colonne issue de la vue et donc non indexée. Un index sur s.Last_Name, s.First_Name pourrait peut-être améliorer légèrement les choses mais comme ce ne sont pas les premières colonnes du tri, c'est pas sûr que ce soit très sensible. Quel est le volume de données à traiter par cette requête ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
Copyright © 2000-2012 - www.developpez.com