Hlavním problémem Případu 2 je to, že v mnoha případech je třeba získat celou sadu výsledků dotazu a poté ji seřadit před prvních N řádků lze vrátit - pokud sloupce ORDER BY nejsou indexovány a Oracle může index použít k tomu, aby se vyhnul řazení. U složitého dotazu a velkého souboru dat to může nějakou dobu trvat. Může však existovat několik věcí, které můžete udělat pro zlepšení rychlosti:
- Snažte se zajistit, aby ve vnitřním SQL nebyly volány žádné funkce – mohou být volány 5 milionůkrát, jen aby se vrátilo prvních 20 řádků. Pokud můžete tato volání funkcí přesunout do vnějšího dotazu, budou se volat méně.
- Pomocí rady FIRST_ROWS_n pobídněte Oracle k optimalizaci s ohledem na skutečnost, že nikdy nevrátíte všechna data.
UPRAVIT:
Další myšlenka:aktuálně předkládáte uživateli zprávu, která mohla vrátí tisíce nebo miliony řádků, ale uživatel je nikdy reálně neprojde všechny. Nemůžete je donutit k výběru menšího množství dat, např. omezením vybraného časového období na 3 měsíce (nebo cokoliv jiného)?