Bonjour,
j'ai un fichier de 14 Millions de lignes (soit environ 1,5 Go) sur lequel je souhaite effectuer un calcul financier simple. Le solde d'un jour est égal au solde du jour précédent - la dépense du jour. J'ai crée une procédure stockée, elle fonctionne sans problème. Cependant elle met un peu plus de 9h pour s'exécuter. J'ai essayé plusieurs méthodes : jointure de la table sur elle-même, curseur, mise en mémoire de la table (avec difficulté, mais sans faire le calcul), mais le temps de traitement reste énorme. Comme cette table reste dans les normes pour 'access', j'ai fait la même opération et le temps de traitement est inférieur à 5 minutes.

Quelqu'un peut-il m'aider ou m'expliquer la différence de temps? cette table est une petite table, je peut être amené à traiter des tables plus importantes. Merci d'avance. voici le code de ma procédure stockée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
 
 declare  var1_cc bigint default 0;
 declare  var1_dc date default 0;
 declare  var1_do date default 0;
 declare  var1_sp float(12,2) default 0;
 declare  var1_sp2 float(12,2) default 0;
 declare  var1_mo float(12,2) default 0;
 declare  var1_id bigint default 0;
 declare  old_mo float(12,2) default 0;
 declare  old_cc bigint default 0;
 declare  var_sold float(12,2) default 0;
 declare done int default 0;
 
 declare curseur1 cursor for select compte_clients, dat_compta, date_ope,SP,SP2, mnt_ope, id from test_m;
 declare continue handler for sqlstate '01329' set done = 1;
 
-- ouverture du curseur
 open curseur1;
-- lecture 1ère ligne du curseur
 fetch curseur1 into var1_cc, var1_dc, var1_do, var1_sp, var1_sp2, var1_mo, var1_id;
 
-- boucle repeat jusqu'au code erreur 01329 détectant la fin du fichier
 label1: repeat
	-- Sauvegarde des données lues pour détecter changement de compte
	set old_cc = var1_cc;
	-- A chaque changement de compte on initialise le solde  et on sauvegarde le montant opération
	set var_sold = var1_sp;
	set old_mo = var1_mo;
 
	-- on teste si la date compta et la date ope sont différentes
	if	var1_dc <> var1_do then
	-- si oui, on lit la prochaine ligne jusqu'a trouvé une ligne avec date compta = date ope
		begin
			fetch curseur1 into var1_cc, var1_dc, var1_do, var1_sp, var1_sp2, var1_mo, var1_id;
			iterate label1;
		end;
	else
	-- on a trouvé une ligne avec date compta = date ope, alors on maj le nouveau solde pour démarrer les calculs
		update test_m
			set SP2 = var1_SP
		where id = var1_id ;
	end if;
 
	-- tant que le numéro de compte est identique on calcule le nouveau solde
	while var1_cc = old_cc do
		-- on lit la ligne que l'on va maj
		fetch curseur1 into var1_cc, var1_dc, var1_do, var1_sp, var1_sp2, var1_mo, var1_id;
		-- on calcule le nouveau solde
		set var_sold = var_sold - old_mo;
		-- on maj le fichier
		update test_m
			set SP2 = var_sold
		where id = var1_id ;
		-- on sauvegarde le montant ope pour le prochain calcul
		set old_mo = var1_mo;
	end while;
 
until done end repeat;
 
close curseur1;