Het grootste probleem met Case 2 is dat in veel gevallen de hele set queryresultaten moet worden verkregen en vervolgens voor moet worden gesorteerd. de eerste N rijen kunnen worden geretourneerd - tenzij de ORDER BY-kolommen zijn geïndexeerd en Oracle de index kan gebruiken om een sortering te voorkomen. Voor een complexe query en een grote set gegevens kan dit enige tijd duren. Er kunnen echter enkele dingen zijn die u kunt doen om de snelheid te verbeteren:
- Probeer ervoor te zorgen dat er geen functies worden aangeroepen in de interne SQL - deze kunnen 5 miljoen keer worden aangeroepen om de eerste 20 rijen terug te geven. Als je deze functie-aanroepen naar de buitenste query kunt verplaatsen, worden ze minder aangeroepen.
- Gebruik een FIRST_ROWS_n hint om Oracle aan te sporen om te optimaliseren voor het feit dat u nooit alle gegevens zult retourneren.
BEWERKEN:
Een andere gedachte:u presenteert de gebruiker momenteel een rapport dat zou duizenden of miljoenen rijen retourneren, maar de gebruiker zal ze nooit allemaal doorbladeren. Kun je ze niet dwingen om een kleinere hoeveelheid gegevens te selecteren, b.v. door het geselecteerde datumbereik te beperken tot 3 maanden (of wat dan ook)?