Hi,
habe folgendes Problem:
habe eine MySQL Datanbank und eine sehr große Tabelle mit über 500.00 Datensätzen. Wenn ich diese nun mittels eines SELECT Statements auswählen will, um damit etwas anzustellen, geht das sehr auf die Performance. Sprich es verbrät Speicher ohne Ende.
Ich benutze folgenden Code für die Abfrage:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl -w
use strict;
use warnings;
use DBI;
my $dsn = "DBI:mysql:SOME_DATABASE:localhost";
my $user = "tom";
my $pwd = "*********";
my $dbh = DBI->connect($dsn, $user, $pwd) or die;
my $sql = qq{SELECT `SOME_FIELD` FROM `SOME_TABLE`};
my $sth = $dbh->prepare($sql);
$sth->execute;
while (my $result = $sth->fetchrow_array) {
print "$result\n";
}
$sth->finish;
$dbh->disconnect;
exit;
Das Problem ist, dass er beim Ausführen der Abfrage eben erst alles in den Speicher lädt, bevor die Ergebnisse der Reihe nach abgefragt werden. Das belegt dann ca 500MB Speicher, was nicht so ganz zufriedenstellend ist.
Frage: wie kann ich die Abfrage optimieren, so dass das nicht ganz so arg auf die Performance geht?
Tom