Currently range queries are very slow (and memory-intensive) on Oracle, because no matter what the range is, everything before its start is fetched, even though it is not returned to the user.
As described e.g. in http://www.oracle.com/technology/books/pdfs/powell_ch.pdf
Oracle needs a special syntax using a subquery: Oracle evaluates ROWNUM before any ordering is applied, so the whole original query including the ordering must be wrapped as a subquery within a SELECT applying ROWNUM filtering. As an example see chapter 6.3.3 in the said PDF:
SELECT * FROM (SELECT * FROM customer ORDER BY name) WHERE
ROWNUM < 25;