perl dbi API を呼び出してデータベースにクエリを実行すると、すべての結果が返されるのでしょうか? それとも、部分的に結果セットを取得し、反復するにつれて、データベースからより多くの行を取得しますか?
私が質問している理由は、perl スクリプトで次のことに気付いたからです。
非常に多数のレコードを返すデータベースにクエリを実行しました。このレコードを取得した後for
、結果をループして、hash
このデータを作成しました。
私が気付いたのは、データベースからの実際のクエリは妥当な時間内に返されることです (結果はかなりのものでした)が、ハッシュを作成するためにデータをループする大きな遅延が発生していました。
私はこれを理解していません。forループとハッシュの構築はメモリ内で行われ、安価になるため、クエリが遅い部分になると思います。
なぜこれが起こるのか説明/アイデアはありますか? ここで基本的なことを誤解していますか?
更新
MySQL がデータをキャッシュすることを理解しているため、同じクエリを複数回実行すると、2 回目以降は高速になります。それでも、メモリ内のデータセットに対する for ループが、MySQL DB へのクエリと同じ (またはそれ以上) の期間になるとは思いません。
質問する
92 次
1 に答える
1
DBD::mysql を使用していると仮定すると、デフォルトではサーバーからすべての結果を一度にプルしてメモリに保存します。これにより、サーバーのリソースを占有することが回避され、RAM は通常十分にあるため、大部分の結果セットに対して正常に機能します。
それはあなたの元の質問に答えますが、さらに支援が必要な場合は、コードを貼り付けることをお勧めします.ハッシュ構築コードが間違っているか、不要なクエリが行われている可能性があります. DBI API を効率的に使用するためのヒントと、DBI が行っていることをプロファイリングする方法については、DBI の高速化も参照してください。
于 2013-09-28T23:01:11.623 に答える