Jed Verity wrote:

>In general, is it faster and more efficient to query a MySQL database once with
>a large SQL select statement and then loop through the huge resulting table?
>Or does it make better sense to perform a number of smaller queries with
>smaller resulting tables?
>
This is a hard question to give an answer to. It depends largely on the 
amount of data you're talking about, the amount of memory on the machine 
your code is executing from, whether you are using persistent database 
connections, etc.

In general, if you use persistent database connections, each additional 
query after the first will be quite fast. I'm sure your question stems 
from seeing someone say that queries are the most common bottleneck for 
Web applications, and this is true to a point.

If the one query you speak of is huge, try some tests and see how much 
memory PHP has to use to maintain that in memory. Consider that multiple 
requests during the time that PHP is "holding" that data in memory will 
result in a pretty decent chunk of memory being used. If you have 
endless amounts of memory (some huge unix machine with 20+ GB of RAM), I 
would say go for the one query method. It is definitely going to be 
faster, so long as you have enough memory to handle it. In most cases, 
if your approach ends up running your machine out of memory under heavy 
load, it would be a poor approach, because it would end up slowing 
*everything* down.

So, maybe that gives you some things to think about. Maybe someone else 
can come up with a more conclusive answer.

In summation:
1) using memory to keep *all* database results can improve performance 
if you have plenty of memory to handle this approach
2) if not, try very specific queries that retrieve just the data you 
need, and carefully free all results as you finish - also try to use 
persistent connections if you forsee your site being under heavy load.

I personally take approach #2, because most of my environments have had 
sane (less than 5 GB) amounts of memory. I *think* this method would be 
more appropriate for most people, even though it seems like you end up 
hitting the database a lot. I've generally gotten extraordinary 
performance (page execution takes less than a tentth of a second 
searching through a database with 50,000 records) from a multi-homed Web 
host with PHP/MySQL, even with 30,000+ transactions/day. It's also more 
difficult to get specific data sets with one query; that approach 
usually requires that you have to take a greatest common denominator 
style approach and end up with way more data than you really need.

I'd be curious to see some other opinions. There's mine. :)

Chris


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to