Bonjour,

J'ai un fichier contenant 30000 lignes à rentrer dans ma BDD, le problème évidemment, c'est le temps d’exécution, je l'ai augmenté, mais j'aimerai le réduire considérablement, car là pour 5min, il ne rentre que 10000 lignes dans la base de données, donc il faudrait 15min pour faire rentrer je pense le fichier complet.

Une ligne du fichier ressemble à cela :
2013-01-29,"2013-01-28,"Terminïe","R","AD","Lille","","Berlin","","CAC32/2013","04:00:00",\N,"0","0","C2","03:30:00","04:00:00","CRTC_FGC","CRTC","","0","0"

Donc, j'ai fait ceci :

Code php : 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
 
$tab = file("upload/".$_FILES['monfichier']['name']); 
$nbligne = count($tab)-1;
 
$id = 0 ; $i = 0 ;
 
// Creation de l'incrementation des id dans la base de donnee
$incremente = $connexion->query("SELECT count(*) FROM mouvement");
$recuperation = $incremente->fetch();
 
if($recuperation == 0)
{
	$id = 1 ;
}
else
{
	$record = $connexion->query("SELECT MAX(id_movement) FROM mouvement");
	$result = $record->fetch();
	$id = $result[0] ;
}
// On ouvre le fichier 
$fichier = fopen("upload/".$_FILES['monfichier']['name'], "r");
 
while (!feof($fichier))
{
	$uneLigne = fgets($fichier);
	if(mb_strlen(trim($uneLigne),'UTF-8'))
	{
		if($i>0) // test pour ne pas lire la premiere ligne
		{  
			$tableauValeurs = explode(',', $uneLigne);
			// insertion des donnees dans la table  
			$id++ ;    
			$connexion->exec('SET NAMES "UTF8"');               
			$connexion->exec("INSERT IGNORE INTO mouvement VALUES 
			('".$id."','".$tableauValeurs[0]."','".$tableauValeurs[1]."','".$tableauValeurs[2]."','"
			.$tableauValeurs[3]."','".$tableauValeurs[4]."','".$tableauValeurs[5]."','"
			.$tableauValeurs[6]."','".$tableauValeurs[7]."','".$tableauValeurs[8]."','"
			.$tableauValeurs[9]."','".$tableauValeurs[10]."','".$tableauValeurs[11]."','"
			.$tableauValeurs[12]."','".$tableauValeurs[13]."','".$tableauValeurs[14]."','"
			.$tableauValeurs[15]."','".$tableauValeurs[16]."','".$tableauValeurs[17]."','"
			.$tableauValeurs[18]."','".$tableauValeurs[19]."','".$tableauValeurs[20]."','"
			.$tableauValeurs[21]."')");
		}
		else
		{
			$i++;          
		}
	}
}

On m'a conseillé de faire plutôt un LOAD DATA INFILE, j'ai regardé la documentation, et au début j'ai cru que cela aurait pu fonctionner, cependant je fais mes tests sur une serveur local MySQL, mais après, l'application sera lancé sur un serveur Oracle, et on m'a dit qu'il n'y a pas d'auto-incrémentation dans une base Oracle. Donc je ne peux pas utilisé cela.

Je ne sais plus trop par où prendre le problème, si quelqu'un pouvait m'indiquer une solution. Merci d'avance.