In my symfony project, I have a “complex” query that looks like:
$d = Doctrine_Core::getTable('MAIN_TABLE')
// Create the base query with some keywords
->luceneSearch($keywords)
->innerJoin('w.T1 ws')
->innerJoin('ws.T2 s')
->innerJoin('w.T3 piv')
->innerJoin('piv.T4 per')
->innerJoin('w.T5 st')
...
->innerJoin('doc.T12 docT')
->innerJoin('w.Lang lng')
->execute();
I added all those innerJoin to reduce the number of query due to my data model. Actually all data are recovered with this only query…. but the query took from 2 to 20 sec. depends on keywords.
I decided to use memcache because data are not changing all the time.
What I’ve done is configuring memcache and adding
...
->useResultCache(true)
->execute();
to my query.
What is strange is that :
- The first time (when the cache is empty/flushed), only one query is execute
- The second time, ~130 ares executed and it take more time than the first…
Those “new” queries are retrieving data from “inner join” for each record.
What I don’t undestand is why “innerjoined” data are not saved in the cache?
I tried to change the hydrate mode but it seems not to be influent.
Someone has an idea?
After a whole day to googlise, to analyse doctrine and become desperate, I found an article that explain the solution:
http://shout.setfive.com/2010/04/28/using-doctrine-result-cache-with-two-deep-relations/