Får du olika frågeplaner när du inkluderar tipset? Mitt antagande är att du gör det utifrån din beskrivning av problemet.
När du kör en fråga i Oracle, realiserar databasen i allmänhet inte hela resultatuppsättningen vid någon tidpunkt (det kan naturligtvis behövas om du anger en ORDER BY
klausul som kräver att all data materialiseras innan sorteringen sker). Oracle börjar faktiskt inte materialisera data förrän klienten börjar hämta data. Den kör tillräckligt mycket av frågan för att generera hur många rader klienten har bett om att hämta (vilket det låter som 10 i ditt fall), returnerar dessa resultat till klienten och väntar på att klienten ska begära mer data innan den fortsätter att bearbeta fråga.
Det låter som när FIRST_ROWS
ledtråd ingår, frågeplanen förändras på ett sätt som gör det dyrare att köra. Uppenbarligen är det inte målet med FIRST_ROWS
ledtråd. Målet är att tala om för optimeraren att generera en plan som gör hämtning av de första N raderna mer effektiv även om det gör hämtning av alla rader från frågan mindre effektivt. Det tenderar att få optimeraren att gynna saker som indexsökningar framför tabellskanningar där en tabellskanning kan vara mer effektiv överlag. Det låter som i ditt fall att optimerarens uppskattningar är felaktiga och det slutar med att den väljer en plan som generellt sett är mindre effektiv. Det innebär ofta att en del av statistiken för några av de objekt som din fråga refererar till är ofullständig eller felaktig.