Note that the DBI
RowCacheSize database handle attribute can often help
you balance your memory/speed tradeoff for large queries. But
it depends on the underlying database -- not all can make use
of it. In practice, I have found some significant differences
in query time/memory when changing this for queries that
return large numbers of rows.
For significant database applications I find it nearly
impossible to write SQL that works across all. I always
end up having to make use of database-specific functions or
other constructs. If your application is only going to run
on one database it's probably fine to make use of
LIMIT, TOP, or Oracle's ROWNUM. It
depends on whether your priority is speed and function or
portability across databases.