Hovedproblemet med Case 2 er, at i mange tilfælde skal hele forespørgselsresultatsættet indhentes og derefter sorteres før de første N rækker kan returneres - medmindre ORDER BY kolonnerne er indekseret, og Oracle kan bruge indekset til at undgå en sortering. For en kompleks forespørgsel og et stort datasæt kan dette tage noget tid. Der kan dog være nogle ting, du kan gøre for at forbedre hastigheden:
- Prøv at sikre, at ingen funktioner kaldes i den indre SQL - disse kan blive kaldt 5 millioner gange bare for at returnere de første 20 rækker. Hvis du kan flytte disse funktionskald til den ydre forespørgsel, vil de blive kaldt mindre.
- Brug et FIRST_ROWS_n tip til at skubbe Oracle til at optimere for det faktum, at du aldrig vil returnere alle data.
EDIT:
En anden tanke:du præsenterer i øjeblikket brugeren for en rapport, der kunne returnere tusinder eller millioner af rækker, men brugeren kommer aldrig realistisk til at bladre igennem dem alle. Kan du ikke tvinge dem til at vælge en mindre mængde data f.eks. ved at begrænse det valgte datointerval til 3 måneder (eller hvad som helst)?