Su consulta deberá contar los primeros 90M registros para obtener los siguientes 100 , por lo que apenas hay margen de mejora.
No veo un ORDER BY cláusula en su subconsulta, pero probablemente la tenga. En este caso, es posible que desee crear un índice sobre él.
Y una pregunta:¿sus usuarios realmente hacen clic en 900K? páginas antes de quejarse del rendimiento?
Actualización:
Si necesita la última página, debe volver a escribir su ORDER BY columna en orden descendente:
SELECT *
FROM (
SELECT rownum rnum, f.*
FROM findings f
ORDER BY
record_ordering_column DESC
)
WHERE rnum > 900
AND rownum <= 100
y crea un índice en record_ordering_column
Tenga en cuenta que mezclo rownum de las consultas anidadas para mejorar el rendimiento.
Vea este artículo en mi blog para más detalles: