>>> This may be a question for -hackers, but I don't like disturbing them
>>> unnecessarily.
>>> I've been having a look at memcached. I would like to ask, is there any
>>> reason that, theoretically, a similar caching system could be built
>>> right into the db serving daemon?
>>> I.e., the hash tables and libevent could sit on top of postmaster as an
>>> optional component caching data on a per-query basis and only hitting
>>> the actual db in the event of a cache miss?
>>
>> I think this is close to what MySQL's query cache does. The question is
>> if this should be the job of the DBMS and not another layer. At least
>> the pgmemcache author and I think that it's better done outside the
>> DBMS. See http://people.FreeBSD.org/~seanc/pgmemcache/pgmemcache.pdf
>> for the idea.
I have always found MySQL's query cache to be utterly useless.
Think about it this way :
It only works for tables that seldom change.
It does not work for big tables (like the posts table of a forum) because
the cache would have to be huge.
So, the most frequent usage of MySQL's query cache is for dumb
applications who use, for instance, PHP, store their configuration in
MySQL, and reload it on each and every page with a SELECT * FROM
configuration.
In this case, you save the query time, but you don't save : the roundtrip
between PHP and the database, extracting query results, building objects
from them, time spent in ORMs, etc.
A much better solution is to do your own caching, for instance using
shared memory in the application server, and then you cache native
language objects. You not only save the query time, but also all the time
spent building those objects on every page load.