O principal problema com o Caso 2 é que, em muitos casos, todo o conjunto de resultados da consulta deve ser obtido e classificado antes as primeiras N linhas podem ser retornadas - a menos que as colunas ORDER BY sejam indexadas e o Oracle possa usar o índice para evitar uma classificação. Para uma consulta complexa e um grande conjunto de dados, isso pode levar algum tempo. No entanto, pode haver algumas coisas que você pode fazer para melhorar a velocidade:
- Tente garantir que nenhuma função seja chamada no SQL interno - elas podem ser chamadas 5 milhões de vezes apenas para retornar as primeiras 20 linhas. Se você puder mover essas chamadas de função para a consulta externa, elas serão chamadas menos.
- Use uma dica FIRST_ROWS_n para estimular a Oracle a otimizar o fato de que você nunca retornará todos os dados.
EDITAR:
Outro pensamento:você está apresentando ao usuário um relatório que poderia retornar milhares ou milhões de linhas, mas o usuário nunca vai realmente passar por todas elas. Você não pode forçá-los a selecionar uma quantidade menor de dados, por exemplo, limitando o intervalo de datas selecionado a 3 meses (ou qualquer outro)?