[php] Trop de temps d'execution

Statut
N'est pas ouverte pour d'autres réponses.

hasbrak

Touriste
Bonjour,

J'expose le problème :

J'ai un fichier .mdb qui se met a jour tous les 4h. Ce fichier comporte en fin d'année plus de 400 000 lignes. (.mdb initialisé le 1 janvier) Le fichier se compose d'une seule table. Je dois travailler sur 3 champs, je souhaite tous exporter dans mysql. La base de mysql comprend tout les lignes depuis X années.

Le passage .mdb => mysql, se fait correctement, l'ajout des nouvelle ligne aussi. Mais cela prend du temps beaucoup de temps. Car je lis chaque ligne dans le .mdb puis je compare au mysql si elle est présente je copie pas sinon j'insert.

Est ce que quelqu'un a autre idée ?

PHP:
<?php
set_time_limit(500);
//Connexion à mysql
$connection = mysql_connect("localhost","root","");
if ( ! $connection )
die ("connection impossible");
$sqlbd="telegramme";
mysql_select_db($sqlbd) or die ("pas de connection");
// Chemin physique de ma base Access
$cheminDeMaBase = 'F:\Documents\******\Graph de Compteur DB\200910.mdb';
// Chaîne utilisée pour la connection ODBC sans DSN s'il vous plaît
$connectionString = sprintf("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=%s", $cheminDeMaBase);
// Connexion
$cnx = odbc_connect($connectionString,"","");
// Requête SQL
$resource = odbc_exec($cnx, "SELECT GASub,TeleDate,Value FROM Telegramme");
// Pour chaque enregistrement...
while(odbc_fetch_row($resource))
{
   
   
    $GASub=odbc_result($resource, 'GASub');
    $TeleDate = odbc_result($resource, 'TeleDate');
	$result = mysql_query("
                    SELECT Compteur, Date
                    FROM telegramme
                    WHERE Compteur = '$GASub'
                    and Date = '$TeleDate'
               ");
	 if(!$result)
               {
                    $message = "Une erreur est survenue lors connexion à la base de donnée.";
               }
               else
               {
					if(mysql_num_rows($result) == 0)
                    {
                       $Value= odbc_result($resource, 'Value'); 
                       $insert = mysql_query("INSERT INTO telegramme (Compteur,Date,Valeur) VALUES('$GASub','$TeleDate','$Value')");
					}	 
				}
}
// Et je ferme les connexions
odbc_close($cnx);
mysql_close($connection); 
?>
 

gregsting

Chat!
Si tu peux ordonner tes 2 DB sur un même critère il y a moyen de les comparer plus rapidement. Si j'ai bien compris tu veux trouver les éléments communs aux deux listes. Tu peux trier tes "listes" puis utiliser l'algo de la plus longue séquence commune (http://en.wikipedia.org/wiki/Longest_common_subsequence_problem) ca n'est pas spécialement simple à comprendre mais pas trop compliqué a implémenter. Il faut voir aussi si trier ta DB ne prends pas plus de temps qu'autre chose...
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut