Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1278 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU]Optimisation d'une requête SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU]Optimisation d'une requête SQL

n°1926469
mv1
Posté le 24-09-2009 à 17:43:59  profilanswer
 

Bonjour,
 

mysql> describe fichiers;
+-------------+--------------+------+-----+------------+----------------+
| Field       | Type         | Null | Key | Default    | Extra          |
+-------------+--------------+------+-----+------------+----------------+
| cle         | int(11)      | NO   | PRI | NULL       | auto_increment |
| nom         | varchar(128) | NO   |     |            |                |
| commentaire | text         | YES  |     | NULL       |                |
| vIntegrees  | int(11)      | NO   |     | 0          |                |
| date        | date         | NO   |     | 0000-00-00 |                |
| Poste       | char(1)      | NO   |     | D          |                |
+-------------+--------------+------+-----+------------+----------------+
6 rows in set (0.02 sec)


 

  • Le champ `Poste` vaut soit 'D' soit 'I'
  • Le champ `vIntegrees` >= -1


Je souhaite afficher l'ensemble des enregistrements du même poste 'D' pour chaque jour où au moins un d'entre eux a une valeur `vIntegrees`>-1.
Voici la requête que j'ai fait et qui fonctionne :

SELECT DISTINCT t1.cle, DATE_FORMAT(t1.date, "%d/%m/%y" ) as dateF, t1.nom, t1.vIntegrees, t1.commentaire FROM fichiers t1, fichiers t2 WHERE t1.Poste='D' AND t2.Poste='D' AND t1.date=t2.date AND (t1.vIntegrees > -1 OR t2.vIntegrees > -1) ORDER BY t1.date DESC, t1.nom


 
Un exemple de résultat :
http://dl.free.fr/tM08QpO18
 
Le soucis, c'est que cette requête met plus de 8 secondes à être traitée (ma table contient 4229 enregistrements pour 700Ko, et elle va encore gonfler avec le temps).
Je n'arrive pas à trouver une autre requête qui fonctionne et qui soit plus rapide. Pourtant, je suis sur que c'est possible (peut-être avec un "WHERE (SELECT..." ou un "HAVING" ), mais cela dépasse mes compétences ...
 
Si quelqu'un pouvait m'aider ... merci bien par avance !!!  :jap:


Message édité par mv1 le 25-09-2009 à 14:14:57
mood
Publicité
Posté le 24-09-2009 à 17:43:59  profilanswer
 

n°1926567
mrbebert
Posté le 24-09-2009 à 23:05:09  profilanswer
 

On peut essayer différemment [:proy]  
 
D'abord, récupérer la liste des jours qui nous intéressent (facile) :
SELECT DISTINCT date FROM fichiers WHERE Poste='D' AND vIntegrees > -1
 
Requête complète :
SELECT cle, DATE_FORMAT(date, "%d/%m/%y" ) as dateF, nom, vIntegrees, commentaire
FROM fichiers WHERE date in (
  SELECT DISTINCT date FROM fichiers WHERE Poste='D' AND vIntegrees > -1
) ORDER BY date DESC, nom
 
A voir si c'est plus performant [:figti]

n°1926638
couak
Posté le 25-09-2009 à 10:14:08  profilanswer
 

Code :
  1. create index ix_fichiers_01 on fichiers(Poste);
  2. create index ix_fichiers_02 on fichiers(`date`);
  3. create index ix_fichiers_02 on fichiers(vIntegrees);


au passage le champs "date" utilise un mot-clé réservé, ce n'est pas très judicieux

n°1926708
mv1
Posté le 25-09-2009 à 14:14:26  profilanswer
 

couak : Merci : l'indexation du champ date améliore largement les choses (1s environ au lieu de 8-9s) !!! (et en effet le nom n'est pas très judicieux ...)
mrbebert : franchement, quand j'ai vu ta solution, je me suis dit : Bingo !!! c'est si évident !! et pourtant ... sur une petite base de test, ça triple le temps. et sur la base de travail, je suis obligé d'interrompre la commande, car elle semble ne jamais se terminer ... dommage : ta requête me plaisait beaucoup !!
 
Merci encore à vous deux pour le temps que vous m'avez accordé !!


Message édité par mv1 le 25-09-2009 à 14:15:37

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU]Optimisation d'une requête SQL

 

Sujets relatifs
[AS] zoom avec un onMouseWheel sur plusieurs clip [RESOLU][RESOLU]Debutant en C++, petite question a propos d'un programme
[Résolu] Hack CSS possible sur positionnement hauteur d'un div ?[Resolu] Redimensionner image avec haut et larg max
[Resolu]Problème formulaire[RESOLU] Sous Eclipse l'exécution marche bien mais pas avec la comm
[RESOLU] JProgressBar qui affiche directement 100% :([Résolu] popen marche pas ???
[Résolu tout seul] [GTK] GTK Cell Renderer ne dessine qu'une ligne ?[RESOLU] SplashScreen qui clignote
Plus de sujets relatifs à : [RESOLU]Optimisation d'une requête SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR