Requête lente
FONGBE
Messages postés
147
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
ma requête devient très lente quand j'insère la fonction RANG. quand le supprime la fonction rang? alors la requête s'exécute rapidement. la requête est créée à partir de deux tables: table ETUDIANT et Table COMPOSER. le champ moyenne est dans la table COMPOSER et les champs année scolaire et classe sont dans la table ETUDIANT. Dans la formule du RANG, les champs moyenne, classe et année scolaire interviennent. ça marche mais la requête devient très lente. merci de m'apporter de l'aide.
A voir également:
- Requête lente
- Free connexion lente 4g - Forum Free mobile
- Musique lente puis rapide sans parole - Forum Musique / Radio / Clip
- Problème 3g 4g 5g - Forum Opérateurs & Réseaux mobiles
- Cherche musique douce puis qui pète le feu - Forum Musique / Radio / Clip
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Je suppose que tu fais un JOIN entre les tables ETUDIANT et COMPOSER, et que, dans la même requête, tu fais appel à ta fonction RANG.
Peux-tu essayer de faire deux requêtes, la première sans la fonction RANG, et ensuite une seconde requête, utilisant la première comme source, avec la fonction RANG?
Peux-tu essayer de faire deux requêtes, la première sans la fonction RANG, et ensuite une seconde requête, utilisant la première comme source, avec la fonction RANG?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Que fait la fonction RANG? Elle est peut-être très lente en elle même.
Je suggère, pour améliorer les performances, de créer une table RESULTATS à partir de la requête à partir de ETUDIANT et COMPOSER.
Cette table peut-être temporaire, elle peut être vidée quand les RANGs ont été calculés.
Ta fonction RANG pourrait utiliser cette table RESULTATS pour calculer les rangs rapidement (je me demande comment tu les calcules pour le moment).
Ou bien tu peux calculer les RANGs ainsi (je suppose que la table RESULTATS contient matricule, moyenne, annee, classe):
Voici une requête qui visualise (un peu mieux) comment le RANG est calculé:
Je suggère, pour améliorer les performances, de créer une table RESULTATS à partir de la requête à partir de ETUDIANT et COMPOSER.
Cette table peut-être temporaire, elle peut être vidée quand les RANGs ont été calculés.
Ta fonction RANG pourrait utiliser cette table RESULTATS pour calculer les rangs rapidement (je me demande comment tu les calcules pour le moment).
Ou bien tu peux calculer les RANGs ainsi (je suppose que la table RESULTATS contient matricule, moyenne, annee, classe):
SELECT R1.matricule, Count(R2.matricule)+1 AS RANG FROM RESULTATS AS R1 LEFT JOIN resultats AS R2 ON ((R2.moyenne)<[R1].[moyenne]) AND ((R1.annee)=[R2].[annee]) AND ((R1.classe)=[R2].[classe]) GROUP BY R1.matricule;
Voici une requête qui visualise (un peu mieux) comment le RANG est calculé:
SELECT R1.classe, R1.annee, R1.matricule,R1.moyenne,R2.matricule, R2.moyenne FROM RESULTATS AS R1 LEFT JOIN resultats AS R2 ON ((R2.moyenne)<[R1].[moyenne]) AND ((R1.annee)=[R2].[annee]) AND ((R1.classe)=[R2].[classe]) ORDER BY R1.classe, R1.annee, R1.moyenne,R1.matricule, R2.moyenne,R2.matricule;
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Si c'est résolu ou que tu n'es plus intéressé, peux-tu clôturer cette discussion?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
j'ai un peu de mal là.
Le champ moyenne est où ? Dans la table COMPOSER ou dans la requête RANG ?
Peux tu mettre *tous les champs* des tables concernées et des requêtes ?
A+
j'ai un peu de mal là.
Le champ moyenne est où ? Dans la table COMPOSER ou dans la requête RANG ?
Peux tu mettre *tous les champs* des tables concernées et des requêtes ?
A+
voici les tables: T-ETUDIANT( Matricule etud, nom et prénoms, date de naiss,sexe,année scolaire, # Refclasse)
T-COMPOSER( refcompo, Interro1, interro2,interro3, moy interro, devoir commun, moyenne semestre,Rang,#matricule etud, Refmatière)
Nb: les interro sont noté sur 20 tandis que le devoir est noté sur 40, donc la moyenne des interro plus le devoir commun donne la moyenne du semestre.
j'ai créée d'abord à partir de la T-COMPOSER une requête analyse croisée pour afficher les matières en colonne et calculer la moyenne du semestre. cette requête analyse croisée qui calcule la moyenne du semestre et afficher les notes des matières est appelée PERIODE. la requête PERIODE avec la T-ETUDIANT donne la requête PERIODE1. C'est dans cette requête PERIODE1 que j'ai insérée la fonction RANG. C'est cette requête PERIODE1 qui est très lourde quand je la lance. merci beaucoup à vous.
T-COMPOSER( refcompo, Interro1, interro2,interro3, moy interro, devoir commun, moyenne semestre,Rang,#matricule etud, Refmatière)
Nb: les interro sont noté sur 20 tandis que le devoir est noté sur 40, donc la moyenne des interro plus le devoir commun donne la moyenne du semestre.
j'ai créée d'abord à partir de la T-COMPOSER une requête analyse croisée pour afficher les matières en colonne et calculer la moyenne du semestre. cette requête analyse croisée qui calcule la moyenne du semestre et afficher les notes des matières est appelée PERIODE. la requête PERIODE avec la T-ETUDIANT donne la requête PERIODE1. C'est dans cette requête PERIODE1 que j'ai insérée la fonction RANG. C'est cette requête PERIODE1 qui est très lourde quand je la lance. merci beaucoup à vous.