Získáváte různé plány dotazů, když zahrnete nápovědu? Předpokládám, že to děláte na základě vašeho popisu problému.
Když spustíte dotaz v Oracle, databáze obecně nezhmotní celou sadu výsledků v žádném okamžiku (samozřejmě to může být nutné, pokud zadáte ORDER BY
klauzule, která vyžaduje, aby všechna data byla zhmotněna, než dojde k řazení). Oracle ve skutečnosti nezačne zhmotňovat data, dokud klient nezačne data načítat. Spustí dostatek dotazu, aby vygeneroval libovolný počet řádků, které klient požádal o načtení (což zní jako 10 ve vašem případě), vrátí tyto výsledky klientovi a čeká, až si klient vyžádá další data, než bude pokračovat ve zpracování dotaz.
Zní to, jako když FIRST_ROWS
Pokud je zahrnuta nápověda, plán dotazů se mění způsobem, který zdražuje provádění. To samozřejmě není cílem FIRST_ROWS
náznak. Cílem je sdělit optimalizátoru, aby vygeneroval plán, díky kterému bude načítání prvních N řádků efektivnější, i když bude načítání všech řádků z dotazu méně efektivní. To vede k tomu, že optimalizátor upřednostňuje věci jako prohledávání indexů před prohledáváním tabulek, kde může být prohledávání tabulky celkově efektivnější. Zní to, že ve vašem případě jsou odhady optimalizátoru nesprávné a nakonec se vybere plán, který je obecně méně efektivní. To často znamená, že některé statistiky některých objektů, na které váš dotaz odkazuje, jsou neúplné nebo nesprávné.