As someone else mentioned if you can cache it, cache it.
That said... am I reading that right that in one of your queries you are joining on 13 different tables?
- Find the SQL produced for that query and run it through your database using whatever necessary to get the query plann (ie. EXPLAIN SELECT.....). Make sure you've got indexes on the columns that need them.
- Play around with breaking that query up into smaller pieces. It may be that splitting them into individual queries and "building the join" yourself turns out to be faster. This is particularly true if your DB isn't picking up the indexes and if you have massive tables, but are only returning a very small set of data (and again your DB isn't picking up the indexes and lopping things off from the get go).
If you're using MySQL it can be very frustrating when you have the right indexes, but it chooses not to use them. Look to see if you can force it to or give it hints.