sql >> Database teknologi >  >> RDS >> Oracle

ResultSet.next kun meget langsomt, når forespørgslen indeholder FIRST_ROWS eller ROWNUM begrænsning

Får du forskellige forespørgselsplaner, når du inkluderer tippet? Min antagelse er, at du gør det ud fra din beskrivelse af problemet.

Når du udfører en forespørgsel i Oracle, materialiserer databasen generelt ikke hele resultatsættet på noget tidspunkt (det kan det naturligvis være nødvendigt, hvis du angiver en ORDER BY klausul, der kræver, at alle data materialiseres, før sorteringen sker). Oracle begynder faktisk ikke at materialisere data, før klienten begynder at hente data. Den kører nok af forespørgslen til at generere hvor mange rækker klienten har bedt om at hente (hvilket det lyder som 10 i dit tilfælde), returnerer disse resultater til klienten og venter på, at klienten anmoder om flere data, før den fortsætter med at behandle forespørgsel.

Det lyder som når FIRST_ROWS tip er inkluderet, ændres forespørgselsplanen på en måde, der gør den dyrere at udføre. Det er naturligvis ikke målet med FIRST_ROWS antydning. Målet er at fortælle optimeringsværktøjet at generere en plan, der gør hentning af de første N rækker mere effektiv, selvom det gør hentning af alle rækker fra forespørgslen mindre effektiv. Det har en tendens til at få optimeringsværktøjet til at favorisere ting som indeksscanninger frem for tabelscanninger, hvor en tabelscanning generelt kan være mere effektiv. Det lyder dog som om, i dit tilfælde, at optimizerens estimater er forkerte, og det ender med at vælge en plan, der bare generelt er mindre effektiv. Det betyder ofte, at nogle af statistikken på nogle af de objekter, din forespørgsel refererer til, er ufuldstændige eller forkerte.



  1. Opret en RULLING sum over en periode i mysql

  2. Tips til at flytte SQL Server-database fra én server til en anden - SQL Tutorial af Rajan Singh

  3. Hvad er den bedste praksis for at indsætte en post, hvis den ikke allerede eksisterer?

  4. Databasedesign til brugerdefineret formularbygger (og lagring af resultater)