On Mon, 2004-06-14 at 18:04, ljb wrote: > Thanks@xxxxxxxxxxxx wrote: > > Hello.... > > > > I would like to know the performance of pg_fetch_array. Cosider the code: > > > > $query = "select * from foo"; > > $result = pg_query( $db, $query ); > > > > while ($row = pg_fetch_array($result)) > > { > > $a = $row["a"]; > > $b = $row["b"]; > > $c = $row["c"]; > > $d = $row["d"]; > > } > > > > Does php need to read database everytime when pg_fetch_array is executed in > > the while loop or all the rows have been in the memory after pg_query? > > The whole result query is stored in memory when pg_query returns, and > pg_fetch_array just gets the next row. > > > If read database is needed, is there any method to copy all the things into > > memory by using other command? (because I have a application which needs > > large amount database update/retrieval and I wish the performance of the > > overall applications run faster.) > > > > or other method you would like to recommend in order to make the faster > > response time? > > Actually, bringing the whole result into memory before processing any rows > can be slower, since the web server has to wait for the database server to > finish before it can start working on the data. So you can't get any > overlap of database and web server processing. As far as I know, there > isn't any alternative currently in the PHP PostgreSQL interface; there are > asynchronous queries but you still can't process any rows until they all > come back. Yes, operating on the whole set in memory at one time is not the best job for PHP, but maybe for PostgreSQL. And there is a way to retrieve some small percentage at a time, use a cursor. See declare and fetch in the manual. Works a charm in PHP.