Mam kwerendy SQL, który wygląda mniej więcej tak:Jak przyspieszyć numer wiersza w Oracle?
SELECT * FROM(
SELECT
...,
row_number() OVER(ORDER BY ID) rn
FROM
...
) WHERE rn between :start and :end
Zasadniczo, jest to, że część ORDER BY jest spowolnienie rzeczy w dół. Jeśli miałbym go usunąć, koszt EXPLAIN spada o rząd wielkości (ponad 1000x). Próbowałem tego:
SELECT
...
FROM
...
WHERE
rownum between :start and :end
Ale to nie daje poprawnych wyników. Czy jest jakiś łatwy sposób, aby to przyspieszyć? Czy będę musiał spędzić więcej czasu z narzędziem EXPLAIN?
Działa jak Jednak wskazówki dotyczące optymalizatora nie wydawały się mieć znaczącej różnicy: –
Oznacza to, że 'CBO' był wystarczająco inteligentny, aby podnieść indeksy.To naprawdę było ROWNUM zamiast ROW_NUMBER, które miały tutaj znaczenie. – Quassnoi
Ale nadal zostawiłbym wskazówki lub stworzył OUTLINE, na wypadek gdyby CBO zmieniło zdanie :) – Quassnoi