Główny problem w przypadku 2 polega na tym, że w wielu przypadkach cały zestaw wyników zapytania musi zostać uzyskany, a następnie posortowany przed można zwrócić pierwszych N wierszy - chyba że kolumny ORDER BY są indeksowane i Oracle może użyć indeksu, aby uniknąć sortowania. W przypadku złożonego zapytania i dużego zestawu danych może to zająć trochę czasu. Jednak może być kilka rzeczy, które możesz zrobić, aby poprawić prędkość:
- Spróbuj się upewnić, że w wewnętrznym SQL nie są wywoływane żadne funkcje — mogą one zostać wywołane 5 milionów razy tylko po to, aby zwrócić pierwsze 20 wierszy. Jeśli możesz przenieść te wywołania funkcji do zewnętrznego zapytania, będą one wywoływane mniej.
- Użyj wskazówki FIRST_ROWS_n, aby skłonić Oracle do optymalizacji pod kątem tego, że nigdy nie zwrócisz wszystkich danych.
EDYTUJ:
Inna myśl:obecnie przedstawiasz użytkownikowi raport, który może zwracają tysiące lub miliony wierszy, ale użytkownik nigdy realistycznie nie przegląda ich wszystkich. Czy nie można ich zmusić do wybrania mniejszej ilości danych np. ograniczając wybrany zakres dat do 3 miesięcy (lub cokolwiek innego)?