Bonjour,


Je m'explique : j'ai une table contenant 66000 lignes environs. je dois extraire 2 champs pour toutes les lignes de cette table et les écrire dans un fichier texte.

voici mon 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
 
##Ouverture en écriture du fichier de sortie
	my $nom_fichier = "dico_aliases_".$espece.".txt";
	my $fichier_sortie="/Users/admin/Scripts_math/text_mining/".$nom_fichier;
	open(ALIAS,">$fichier_sortie") or die "Impossible de creer le fichier $fichier_sortie\n";
 
	#construction du nom de la table contenant les genes et aliases dans la BD
	$table = $espece."_transcript_go";
 
	#requete récupération des aliases de tous les genes product
	my $requete="SELECT DISTINCT gene_product, gene_product_aliases FROM $table;";
 
	#prépare la requête sql
	my  $res = $dbconnect_loc->prepare($requete);
 
	#exécution de la requête sql
	$res-> execute() || die "pb de selection : $DBI::errstr";
 
	print (ALIAS "Genes\t||\tAliases \t|\n");
 
	while ((@aliases = $res -> fetchrow_array))
	{
		if ($aliases[1] ne "")
		{
			print (ALIAS $aliases[0]."\t||\t".$aliases[1]."\t|\n");
		}
		else
		{
			print (ALIAS $aliases[0]."\t|||\n");
		}
	}
 
	close (ALIAS);
 
	#spécifie la fin de la requête
	$res-> finish();
 
	#déconnection à la base de données
	$dbconnect_loc->disconnect();
Je ne sais pas comment faire pour optimiser le temps de génération du fichier (d'autant plus que je dois le faire 3 fois sur trois tables différentes d'environ la même taille...).

Pensez vous que ça puisse se faire en perl, ou moitier en perl moitié en SQL peut être... j'avoue ne pas avoir d'idées...

la première extraction de 34 468 lignes a pris environ 35min. Est ce qu'il y a un moyen de diminuer ce temps sachant que la prochaine table sera de 66 483 puis de 74 934?

EDIT : la première extraction était en fait incomplète : le fichier final ne comportait que 17301...

34000 lignes en 35 minutes ???