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

Oracle rychlejší stránkovací dotaz

Ve skutečnosti teď nemám k dispozici Oracle, ale nejlepší SQL dotaz pro stránkování je určitě následující

select *
from (
        select rownum as rn, a.*
        from (
                select *
                from my_table
                order by ....a_unique_criteria...
            ) a
    )
where rownum <= :size
    and rn >  (:page-1)*:size

http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html

Aby bylo dosaženo konzistentního stránkování měli byste řádky seřadit podle jedinečných kritérií , vyhnete se tak načtení pro stránku X řádku, který jste již načetli pro stránku Y ( !=X).

EDIT:

1) Řazení řádků pomocí jedinečných kritérií znamená seřadit data tak, aby si každý řádek zachoval stejnou pozici při každém provedení dotazu

2) Rejstřík se všemi výrazy použitými v klauzuli ORDER BY pomůže získat výsledky rychleji, zvláště pro první stránky. S tímto indexem nemusí plán provádění zvolený optimalizátorem třídit řádky, protože vrátí řádky posouvající index podle jeho přirozeného pořadí.

3) Mimochodem, nejrychlejší způsob, jak vyvolat stránku výsledku z dotazu, je provést dotaz pouze jednou a zvládnout veškerý tok ze strany aplikace.



  1. Chyby T-SQL, úskalí a osvědčené postupy – funkce oken

  2. Použití docker-compose k vytvoření tabulek v databázi postgresql

  3. Zabezpečení databáze – šifrování záloh během přepravy a v klidu

  4. Najděte počet sloupců v tabulce