sql >> Databáze >  >> RDS >> Oracle

ResultSet.next je velmi pomalý, pouze pokud dotaz obsahuje omezení FIRST_ROWS nebo ROWNUM

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é.



  1. Data typu Oracle Number na formát data a času

  2. Chyba:Neplatný výraz cesty. Musí to být StateFieldPathExpression, který selhal při výběru pole

  3. Povolit uživatelům pouze určité informace z databáze

  4. jak udržovat pole objednávky zobrazení v php