|
Posted by Saul on 12/06/06 15:41
Vincent Delporte wrote:
> A friend is running a community application in PHP on a shared
> server, and his provider is complaining that it's using the DB too
> much.
>
> Apart from making changes to how data are organized in the DBMS, are
> there ways in PHP to minimize DB load, eg. caching data instead of
> reading/writing them from/to the DBMS every time, etc.
If you can get some timings on the queries and a count of how many
queries are running per page. If he's abstacted the query to a separate
class this is quite simple, just capture the beforetime and an
aftertime around a query.
Some very obvious things slow down queries. Using select * from table
is a lot slower than selecting explicit fields from a table,
particularly if there are lots of joined tables. Left outer joins are
typically very slow.
There are a lot of instances where one long very heavily joined select
statement would be better off as two or more shorter selects
for instance to find the most recent item added
select id from headtable order by whenAdded DESC limit 0,1
select * from itemtable where headid=$id
is likely to be quicker than the bigger
select * from headtable inner join
itemtable on headtable.id=itemtable.headid
order by headtable.whenAdded DESC
However, the converse is also true, firing off the same query
repeatedly in a loop is actually a slow and intensive way of working -
better to have the query pull lots of answers and iterate through them.
Outside these, until you look at the timings and quantities and types
of queries generated it's tough to know other places to look. As an
example our website is completely (absolutely completely) database
generated and generates a page with between 10 and 25 query statements
(it depends on what the user wants shown on their site/pages) of a
database which has 70+ different database tables. We're continually
trying to tune it to reduce the number of queries and optimise the
speed of those queries.
If you can't reduce/improve the database queries then it may be that
you've outgrown the existing database/server infrastructure.
Saul
www.notanant.com
communities of websites
[Back to original message]
|