Expensive - Disk I/O.
I have web site with ~30k uniq host/day. All pages at this site are generated by perl+SQLite. Database size ~ 5Gb. Database updates only once per day, so it's should be very easy to cache popular sql's select statements.
You shouldn't cache the results of SQL select statements but better cache the complete results, for example as HTML. Or consider creating the complete website as static pages (or at least the parts that will be requested most). If you need authentication etc., have that part dynamic but include the static parts directly from disk.