La tua query dovrà contare i primi 90M record per ottenere il prossimo 100 , quindi non c'è quasi margine di miglioramento.
Non vedo un ORDER BY clausola nella tua sottoquery, ma probabilmente ce l'hai. In questo caso, potresti voler creare un indice su di esso.
E una domanda:i tuoi utenti fanno davvero clic su 900K pagine prima di lamentarsi delle prestazioni?
Aggiornamento:
Se hai bisogno dell'ultima pagina, devi riscrivere il tuo ORDER BY colonna in ordine decrescente:
SELECT *
FROM (
SELECT rownum rnum, f.*
FROM findings f
ORDER BY
record_ordering_column DESC
)
WHERE rnum > 900
AND rownum <= 100
e crea un indice su record_ordering_column
Nota che mescolo rownum 's dalle query nidificate per migliorare le prestazioni.
Vedi questo articolo nel mio blog per maggiori dettagli: