sql >> Database >  >> RDS >> Oracle

Best practice voor paginering in Oracle?

Als u al analyses gebruikt (ROW_NUMBER() OVER ... ) dan voegt het toevoegen van een andere analytische functie aan dezelfde partitie verwaarloosbare kosten toe aan de query.

Aan de andere kant zijn er veel andere manieren om paginering uit te voeren, waarvan één met rownum :

SELECT * 
  FROM (SELECT A.*, rownum rn
          FROM (SELECT *
                  FROM your_table
                 ORDER BY col) A
         WHERE rownum <= :Y)
 WHERE rn >= :X

Deze methode is superieur als u een geschikte index in de bestelkolom heeft. In dit geval kan het efficiënter zijn om twee zoekopdrachten te gebruiken (één voor het totale aantal rijen, één voor het resultaat).

Beide methoden zijn geschikt, maar in het algemeen als u zowel het aantal rijen als een pagineringsset wilt, is het gebruik van analyse efficiënter omdat u de rijen slechts één keer opvraagt.



  1. MyBatis RowBounds beperkt de resultaten van zoekopdrachten niet

  2. Wanneer gebruik je SELECT ... VOOR UPDATE?

  3. Wat is een goede manier om alle witruimtetekens van een string in T-SQL zonder UDF en zonder CLR te trimmen?

  4. Een manier om een ​​index te laten zoeken naar een leidende %wildcard