5

次のコードを使用してmysqlデータベースに接続しています。

my $dbh = DBI->connect("DBI:mysql:test:localhost", $user, $pass)
    or die $DBI::errstr;
my $sqlQuery  = $dbh->prepare($query) 
    or die "Can't prepare $query: $dbh->errstr\n"; 
my $rv = $sqlQuery->execute 
    or die "can't execute the query: $sqlQuery->errstr";

while (my @row= $sqlQuery->fetchrow_array()) {
    # do something;
}

私の疑問は次のとおりです。アプリケーションが小さなDBと対話するまでは問題ありません。しかし、このアプリケーションをDBサイズが数百GBのライブ環境に移動すると、このコードによってどのようなパフォーマンスの問題が発生する可能性があります。事実上、私が求めているのは、次の行です-

@row= $sqlQuery->fetchrow_array();

Perlはテーブルの内容全体をコピーし、それを変数にダンプしますか?はいの場合、データベースサーバーだけでなくアプリケーションにも重大なパフォーマンスの問題が発生しませんか?

4

1 に答える 1

3

行で:

@row= $sqlQuery->fetchrow_array();

一度に1行がデータベースからperlに返されます。大規模なデータベースと対話する場合、クエリの結果セット全体を変数にダンプすることはありません。

$arrRef = $sqlQuery->fetchall_arrayref();

一方で..

于 2012-07-08T12:07:34.667 に答える