Requête sur base access à un million de lignes [Résolu]

Signaler
Messages postés
99
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
28 juillet 2011
-
Messages postés
99
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
28 juillet 2011
-
Bonjour à toutes et tous!

Voilà, je suis dans une petite panade...
Pour une appli, il faut que je lise une table sur une base Access, qui contient 1 150 000 lignes. Et ensuite, il faut que l'introduise sur une base MySql.
J'utilise PDO pour lire les base Access et MySql.
Mais je ne trouve pas comment faire pour qu'un variable puisse enregistrer un million de lignes... Car j'ai toujours un problème de "Fatal error: Out of memory (allocated 1702100992) (tried to allocate 44 bytes) in db.php on line 35".
function select($req, $values = NULL) {

if(!is_numeric($values) && $values == NULL) {
$values = array();
} elseif(!is_array($values)) {
$values = array($values);
}

$this->sth = $this->dbh->prepare($req);
$this->sth->execute(array_values($values));
$h_data = $this->sth->fetchAll(PDO::FETCH_ASSOC);

return $h_data;
}


J'ai donc une erreur sur la ligne "$h_data = $this->sth->fetchAll(PDO::FETCH_ASSOC);". J'ai beau augmenter la memory_limit à des valeurs folles (5 000 000M), ça ne change rien.
Si je fais un memory_get_peak_usage, il me met 1.58 GB quelle que soit la limite que je met...

Si vous avez une idée, s'il vous plait.

Merci!!

Romain

4 réponses

Messages postés
99
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
28 juillet 2011

Merci pour vos réponses rapides!

Mais vu qu'il n'y a pas d'équivalence de Rownum, ou limit, je fait faire un TOP de la moitié des champs triés selon l'identifiant par ordre croissant ou décroissant.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
308
Est ce que tu peux séléctionner une parties des lignes avec un
SELECT * FROM TABLE WHERE ROWNUM<1000;


Si oui, tu peux faire la migration toutes les 10000 lignes à l'aide d'un programme.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
308
augmenter la augmenter la memory_limit ne change rien, c'est les limites de la mémoire physique qui sont atteintes, a part ajouter de la ram, il n'y a rien à faire
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
14
Alors ça remonte à trèèèèès longtemps..
J'avais utilisé la fonction TOP dans le SELECT (ROWNUM c'est Oracle non ??) et effacer N enregistrements et le tout en boucle..
Autre méthode, tu cherches dans une colonne toutes les valeurs distinctes et tu fais un select sur un filtre sur cette colonne et tu boucles..
S.