Un collègue m'a dit que l'exécution d'une instruction SQL place toujours les données dans la RAM/swap par le serveur de base de données. Il n'est donc pas pratique de sélectionner de grands ensembles de résultats.L'exécution d'une instruction prend-elle toujours en mémoire le jeu de résultats?
Je pensais que ce code
my $sth = $dbh->prepare('SELECT million_rows FROM table');
while (my @data = $sth->fetchrow) {
# process the row
}
récupère le jeu de résultats ligne par ligne, sans qu'il soit chargé de la RAM. Mais je ne trouve aucune référence à cela dans les documents DBI ou MySQL. Comment le jeu de résultats est-il réellement créé et récupéré? Est-ce que cela fonctionne de la même manière pour les sélections simples et les jointures?
question sur le but, pourquoi avez-vous besoin d'aller chercher des millions de lignes d'enregistrement et itérer chercher tout? 'mysqldump' devrait être plus approprié – ajreal
@ajreal: J'ai besoin de traiter toutes les lignes dans l'ordre d'insertion et de générer des rapports. – planetp
ok, est-ce rationnel de le faire? en utilisant la fonction mysql pour générer la vue, la table temporaire n'est pas suffisante pour le rapport? ou même envisager de vider les résultats BIG dans le fichier, et ouvrir le fichier pour le traitement – ajreal