Krijgt u verschillende queryplannen wanneer u de hint opneemt? Mijn veronderstelling is dat u dat doet op basis van uw beschrijving van het probleem.
Wanneer u een query uitvoert in Oracle, zal de database over het algemeen op geen enkel moment de volledige resultatenset tot stand brengen (uiteraard moet dit mogelijk zijn als u een ORDER BY
opgeeft clausule die vereist dat alle gegevens worden gematerialiseerd voordat de sortering plaatsvindt). Oracle begint pas met het materialiseren van gegevens als de klant begint met het ophalen van gegevens. Het voert genoeg van de query uit om het aantal rijen te genereren dat de client heeft gevraagd om op te halen (wat in uw geval 10 klinkt), retourneert die resultaten naar de client en wacht tot de client meer gegevens opvraagt voordat hij doorgaat met het verwerken van de vraag.
Het klinkt alsof de FIRST_ROWS
hint is opgenomen, verandert het queryplan op een manier die het duurder maakt om uit te voeren. Dat is duidelijk niet het doel van de FIRST_ROWS
hint. Het doel is om de optimizer te vertellen om een plan te genereren dat het ophalen van de eerste N rijen efficiënter maakt, zelfs als het het ophalen van alle rijen uit de query minder efficiënt maakt. Dat heeft de neiging ertoe te leiden dat de optimizer zaken als indexscans verkiest boven tabelscans, waarbij een tabelscan over het algemeen efficiënter kan zijn. Het klinkt alsof in uw geval de schattingen van de optimizer onjuist zijn en uiteindelijk een plan kiest dat over het algemeen minder efficiënt is. Dat betekent vaak dat sommige statistieken over sommige objecten waarnaar uw zoekopdracht verwijst, onvolledig of onjuist zijn.