Bonjour à tous,
J'ai posté sur le forum perl dans un premier temps mais on m'a conseillé de m'addresser à vous. Alors je me lance:
(ne prenez pas garde au script perl, il a été vérifié sur le forum perl et est correct. je le mets juste pour que vous voyez où sont les insert et update et combien d'attribut y a dans ma table).

Voilà mon souci. Je traite un fichier d'environ 7000 lignes. Pour chaque ligne je compare une donnée de la ligne à qui constitue une donnée unique. Si cette donnée est présente dan sma base de donnée, j'update les champs de l'enregistrement correspondant, sinon, j'insère un nouvel enregistrement.
Voilà mon code:

Code:
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
62
63
64
65
66
67
68
69
70
 
#!c:\perl\bin\perl.exe 
####### Packages ####################### 
use TX2::BD; 
use TX2::Tools; 
use DBI; 
$start=&TX2::Tools::GetDate('français'); 
print "Start: $start\n"; 
######################################## 
####### Variables ###################### 
$TrRcvDoc=".\\TRRCVDOC.txt"; 
$table='trrcvdoc'; 
$nbinsertion=0; 
$nbupdate=0; 
######################################## 
 
open(TRRCVDOC,$TrRcvDoc) or die "Erreur ouverture $TrRcvDoc $! \n"; 
@TRRCVDOC=<TRRCVDOC>; 
close (TRRCVDOC); 
@newtab=map{ [substr($_,0,6), 
                  substr($_,6,5), 
                  substr($_,22,6), 
                  substr($_,28,5), 
                  substr($_,33,6), 
                  substr($_,39,5), 
                  substr($_,44,14), 
                  substr($_,58,14), 
                  substr($_,72,20), 
                  substr($_,92,1), 
                  substr($_,93,1), 
                  substr($_,94,5), 
                  substr($_,120,35), 
                  substr($_,155,35), 
                  substr($_,190,20), 
                  substr($_,210,1), 
                  substr($_,211,6), 
                  substr($_,217,3), 
                 ] } @TRRCVDOC; 
 
$dbh=&TX2::BD::Connexion(); 
 
foreach(my $i=0;$i<=$#newtab;$i++) 
{ 
    $req=$dbh->prepare("SELECT DATE_CREATION_DOC from trrcvdoc WHERE NUM_MESSAGE=\'$newtab[$i][8]\'"); 
    $req->execute(); 
    my $res=$req->fetchrow_array(); 
    $req->finish(); 
    if ($res ne "") 
    { 
          &TX2::BD::UPDATE($dbh,$table,'NUM_MESSAGE',$newtab[$i][8],'CODE_STATUT_1',$newtab[$i][9]); 
          $nbupdate++; 
    } 
    else 
    { 
          $insert="INSERT INTO trrcvdoc VALUES ('',"; 
          for(my $j=0;$j<=16;$j++) 
          { 
              $insert.="\'".$newtab[$i][$j]."\',"; 
          } 
          $insert.="\'".$newtab[$i][17]."\')"; 
          $dbh->do($insert); 
          $insert=""; 
          $nbinsertion++; 
    } 
 
$k++; 
} 
&TX2::BD::Deconnexion($dbh); 
$end=&TX2::Tools::GetDate('français'); 
print "End: $end\nDONE: $nbinsertion insertion(s) -- $nbupdate update(s)\n";

Et bien, ce processus se fait en plus de 6 minutes prends 100% de mon UC.
Machine: DELL Latitude D600
Processeur: intel xeon 1,6ghz
RAM: 512 Mo
Version Perl: 5.8.6
php myadmin 2.6.1


Y a t'il un problème dans mon code pour que ce soit aussi long ?(réponse du forum perl: non ça à pas l'air d'être ça) car il y a vraiment très peu d'enregistrement dans ma base, 10000 tout au plus pour l'instant !!