Requête lente
Fermé
FONGBE
Messages postés
149
Date d'inscription
samedi 5 novembre 2016
Statut
Membre
Dernière intervention
7 mars 2024
-
5 nov. 2016 à 18:35
yg_be Messages postés 23391 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 - 20 déc. 2016 à 19:32
yg_be Messages postés 23391 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 - 20 déc. 2016 à 19:32
5 réponses
yg_be
Messages postés
23391
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 décembre 2024
Ambassadeur
1 556
5 nov. 2016 à 18:46
5 nov. 2016 à 18:46
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
23391
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 décembre 2024
Ambassadeur
1 556
6 nov. 2016 à 11:10
6 nov. 2016 à 11:10
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
23391
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 décembre 2024
Ambassadeur
1 556
18 nov. 2016 à 19:45
18 nov. 2016 à 19:45
Si c'est résolu ou que tu n'es plus intéressé, peux-tu clôturer cette discussion?
yg_be
Messages postés
23391
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 décembre 2024
1 556
20 déc. 2016 à 19:32
20 déc. 2016 à 19:32
Merci de marquer comme résolu, bonsoir!
FONGBE
Messages postés
149
Date d'inscription
samedi 5 novembre 2016
Statut
Membre
Dernière intervention
7 mars 2024
5 nov. 2016 à 18:53
5 nov. 2016 à 18:53
Merci à vous je vais essayer cela. je vous fais un retour dès que possible.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
5 nov. 2016 à 23:15
5 nov. 2016 à 23:15
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+
yg_be
Messages postés
23391
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 décembre 2024
1 556
5 nov. 2016 à 23:25
5 nov. 2016 à 23:25
Je pense que RANG est une fonction, une fonction VBA utilisée dans la requête.
La requête contient quelque chose comme "RANG(moyenne, classe, année)".
Et la fonction VBA RANG retourne, à chaque appel, une valeur, utilisée par la requête.
La requête contient quelque chose comme "RANG(moyenne, classe, année)".
Et la fonction VBA RANG retourne, à chaque appel, une valeur, utilisée par la requête.
Utilisateur anonyme
>
yg_be
Messages postés
23391
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 décembre 2024
5 nov. 2016 à 23:36
5 nov. 2016 à 23:36
Donc, aucun intérêt, pas besoin d'une fonction pour cela...
Donc, FONGBE, donnes nous les détails.
A+
Donc, FONGBE, donnes nous les détails.
A+
FONGBE
Messages postés
149
Date d'inscription
samedi 5 novembre 2016
Statut
Membre
Dernière intervention
7 mars 2024
>
Utilisateur anonyme
6 nov. 2016 à 18:26
6 nov. 2016 à 18:26
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.
Utilisateur anonyme
>
FONGBE
Messages postés
149
Date d'inscription
samedi 5 novembre 2016
Statut
Membre
Dernière intervention
7 mars 2024
6 nov. 2016 à 19:17
6 nov. 2016 à 19:17
Bonjour,
on ne stocke pas de calcul dans une table...
Il y a forcément 3 interros ? Le jour où il y en a 4, tu es obligé de changer la structure de la table !
Donc, perso, je te conseille déjà de revoir la structure de ta base.
Si tu as besoin de conseils, n'hésites pas.
A+
on ne stocke pas de calcul dans une table...
Il y a forcément 3 interros ? Le jour où il y en a 4, tu es obligé de changer la structure de la table !
Donc, perso, je te conseille déjà de revoir la structure de ta base.
Si tu as besoin de conseils, n'hésites pas.
A+
FONGBE
Messages postés
149
Date d'inscription
samedi 5 novembre 2016
Statut
Membre
Dernière intervention
7 mars 2024
7 nov. 2016 à 11:47
7 nov. 2016 à 11:47
ok merci, je vais revoir la structure, il ya tout au plus 3 interro et un devoir.