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 :
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...).
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();
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 ???
Partager