PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Compter un grand nombre d'enregistrements
Compter un grand nombre d'enregistrements
Iniciado por nicolas.labbe, 08,oct. 2020 15:38 - 6 respuestas
Publicado el 08,octubre 2020 - 15:38
Bonjour,

Je suis à la recherche d'une solution pour comptabiliser un grand nombre d'enregistrements (+1 million) suivant un paramètres.

Un exemple vaut mieux qu'un long discours :

Imaginons deux machines (A et B) qui scanne des articles et qui enregistrent ces scans dans une base (1 scan = 1 enregistrement). 2 cases à cocher (A ou B) pour compter et afficher le nombre d'enregistrements scannés sur la ligne choisie.

J'ai essayé ces 2 solutions :

1ère solution : Presque 1 minute pour comptabiliser 800 000 enregistrements

PROCÉDURE Actualise_Stats_NbUnitéGlobal(nLigne est un entier)
nTotalLigne est un entier = 0
HExécuteRequête(REQ_NbScan_Ligne_a_ameliorer,hRequêteDéfaut,nLigne)
nTotalLigne = REQ_NbScan_Ligne_a_ameliorer.Comptage_1
RENVOYER nTotalLigne

2ème solution : Interminable ...

PROCÉDURE Actualise_Stats_NbUnitéGlobal(nLigne est un entier)
nTotalLigne est un entier = 0
HExécuteRequête(REQ_NbScan_Ligne_a_ameliorer,hRequêteDéfaut,nLigne)
nTotalLigne = HnbEnr(REQ_NbScan_Ligne_a_ameliorer)
RENVOYER nTotalLigne

Avez-vous une astuce pour compter rapidement un grand nombre ?

Bien cordialement

Nicolas
Miembro registrado
214 mensajes
Publicado el 08,octubre 2020 - 16:03
Bonjour Nicolas,
Sans voir ta requête ni la structure de ta table ni s'il y a des jointures ... c'est plutôt difficile de t'aider.
Mais si c'est sur une seule table et que tu fais un select count (*) from matalbe where marubriqueindex=mavaleur ça devrait être super rapide.
Soit ta requête doit être optimisée, soit ton serveur doit prendre des vitamines de mémoire ...
Yvan
Miembro registrado
948 mensajes
Publicado el 08,octubre 2020 - 16:05
Bonjour
Il faudrait voir le contenu de REQ_NbScan_Ligne_a_ameliorer

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Publicado el 08,octubre 2020 - 16:32
Bonjour Yvan et Philippe,

Merci pour vos réponses ;-)

Voici la requetes :

"Compter le nombre de NumeroPoste (du fichier Scan) non 'Null' tels que Scan.NumeroPoste est égal à ParamNumeroPoste ."

J'espère que c'est assez clair
Publicado el 08,octubre 2020 - 16:38
Alors effectivement c'est une vieille VM qui tourne sur un vieux host vmware ... Donc niveau perf c'est rudimentaire.

Lorsque je demande un comptage manuel sur environ 900 000 enregistrements, le job Manra64.exe sur la vm monte à 100 d'µC le temps du calcul ...
Miembro registrado
194 mensajes
Publicado el 08,octubre 2020 - 20:02
Bonjour

Vous devriez essayer de compter non pas le nombre de NumeroPoste mais le nombre d'ID clé primaire de la table Scan, forcément non NULL donc pas besoin de cette clause. Par ailleurs vous devriez ajouter un index sur la colonne NumeroPoste dans la table Scan. Ce type de requête devrait être instantané , un truc du genre

SELECT COUNT(IDScan) AS Nbre FROM Scan WHERE NumeroPoste = ParamNumeroPoste


--
Côme, Clairinfo
Miembro registrado
13 mensajes
Publicado el 09,octubre 2020 - 11:11
Bonjour Côme,

Merci pour votre réponse.
Je regarde cela