Il problema principale con il caso 2 è che in molti casi l'intero set di risultati della query deve essere ottenuto e quindi ordinato prima le prime N righe possono essere restituite, a meno che le colonne ORDER BY non siano indicizzate e Oracle possa utilizzare l'indice per evitare un ordinamento. Per una query complessa e un set di dati di grandi dimensioni, l'operazione può richiedere del tempo. Tuttavia, potrebbero esserci alcune cose che puoi fare per migliorare la velocità:
- Cerca di assicurarti che nessuna funzione venga chiamata nell'SQL interno:queste potrebbero essere chiamate 5 milioni di volte solo per restituire le prime 20 righe. Se puoi spostare queste chiamate di funzione nella query esterna, verranno chiamate less.
- Utilizza un suggerimento FIRST_ROWS_n per spingere Oracle all'ottimizzazione per il fatto che non restituirai mai tutti i dati.
MODIFICA:
Un altro pensiero:al momento stai presentando all'utente un rapporto che potrebbe restituiscono migliaia o milioni di righe, ma l'utente non le scorrerà mai realisticamente tutte. Non puoi forzarli a selezionare una quantità minore di dati, ad es. limitando l'intervallo di date selezionato a 3 mesi (o altro)?