tôi có cái gì đó trông như thế này:Đẩy nhanh perl DBI fetchrow_hashref
my $report = new ReportGenerator; #custom object
my $dbh = $dbc->prepare('SELECT * FROM some_table WHERE some_condition'); #DBI handle
$dbh->execute();
while(my $href = $dbh->fetchrow_hashref){
$report->process_record($href);
}
$dbh->finish();
print $report->printReport();
Vấn đề của tôi là mỗi lần lặp của vòng lặp là rất chậm. Vấn đề là MySQL. Tôi đã tự hỏi nếu nó có thể đặt một số loại wrapper trong vòng lặp while để làm cho nó lấy nhiều hơn một bản ghi tại một thời điểm, cùng một lúc, lấy tất cả các bản ghi vào bộ nhớ là không thực tế hoặc. Tôi không lo lắng về hiệu quả của mã (hashref vs arrayref, vv ..). Thay vào đó, tôi quan tâm đến việc tìm nạp cho phép nói 10000 bản ghi tại một thời điểm.
Cơ sở dữ liệu có ~ 5 triệu bản ghi. Tôi không thể thay đổi/nâng cấp máy chủ.
Cảm ơn
Mã đó phải chạy đủ nhanh. Bạn có chắc chắn rằng việc chọn không mất nhiều thời gian để chạy? Bạn có thể muốn thời gian thực hiện. Và tất nhiên, quá trình của bạn có thể chậm. Bạn có thể thử chỉ định thời gian tìm nạp mà không cần xử lý. –