Основният проблем със Случай 2 е, че в много случаи целият набор от резултати от заявката трябва да бъде получен и след това сортиран преди първите N реда могат да бъдат върнати - освен ако колоните ORDER BY не са индексирани и Oracle може да използва индекса, за да избегне сортиране. За сложна заявка и голям набор от данни това може да отнеме известно време. Възможно е обаче да има някои неща, които можете да направите, за да подобрите скоростта:
- Опитайте се да се уверите, че във вътрешния SQL не се извикват функции - те може да бъдат извикани 5 милиона пъти само за да върнат първите 20 реда. Ако можете да преместите тези извиквания на функции към външната заявка, те ще бъдат извиквани по-малко.
- Използвайте подсказка FIRST_ROWS_n, за да подтикнете Oracle да оптимизира факта, че никога няма да върнете всички данни.
РЕДАКТИРАНЕ:
Друга мисъл:в момента представяте на потребителя отчет, който може връща хиляди или милиони редове, но потребителят никога няма реалистично да ги прегледа всички. Не можете ли да ги принудите да изберат по-малко количество данни, напр. чрез ограничаване на избрания период от време до 3 месеца (или каквото и да е)?