9

PHP内のさまざまなMySQLカーソルはどのようにメモリを管理しますか?つまり、大きな結果セットを取得するMySQLクエリを作成し、MySQLリソースを取得すると、クエリが取得したデータのどれだけがローカルメモリに保存され、さらに多くの結果がどのように取得されますか?カーソルはすべての結果を自動的にフェッチし、リソースを反復処理するときにそれらを提供しますfetch_arrayか、それともバッファリングされたシステムですか?

最後に、mysql内のさまざまなドライバーのカーソルは異なる方法で実装されていますか?PHP用のMySQLドライバーがいくつかあります。 mysql、、、など。それらはすべて同じ方法に従いますか?mysqlipdo

4

1 に答える 1

5

これは、phpに何を要求するかによって異なります。たとえば、mysql_query()はすべての結果セットを取得します(500メガバイトの場合はさようなら)。あなたがそれを使用したくない場合:あなたは使用することができます:

http://php.net/manual/en/function.mysql-unbuffered-query.php

PDO、MySQL私は同じことをする他の方法があるようです。

クエリによっては、結果セットがデータベース側で具体化される場合があります(並べ替えが必要な場合は、最初の行を取得する前に、並べ替えを完全に実行する必要があります)。

結果セットが大きすぎない場合は、通常、一度にすべてをフェッチすることをお勧めします。これにより、サーバーは使用済みのリソースをできるだけ早く解放できます。

于 2011-05-05T14:56:41.823 に答える