requête de pagination oracle plus rapide
J'ai deux pagination de requêtes que je considère à utiliser.
Premier est
SELECT * FROM ( SELECT rownum rnum, a.* from (
select * from members
) a WHERE rownum <= #paging.endRow# ) where rnum > #paging.startRow#
Et la Deuxième est
SELECT * FROM ( SELECT rownum rnum, a.* from (
select * from members
) a ) WHERE rnum BETWEEN #paging.startRow# AND #paging.endRow#
comment pensez-vous que la requête est la plus rapide?
source d'informationauteur Patrick Jeon
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à l'exécution des plans, exemple avec 1000 lignes:
Et 2.
Dehors de cela, je dirais que la version 2 pourrait être légèrement plus rapide qu'il comprend une étape de moins en moins. Mais je ne sais pas à propos de votre index et de distribution de données donc c'est à vous d'obtenir ces plans d'exécution vous-même et de juger de la situation de vos données. Ou tout simplement le tester.
Je n'ai pas vraiment avoir de la disponibilité de l'Oracle, mais le meilleur de requête SQL pour la pagination est la suivante pour assurer
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
Pour parvenir à une cohérence de pagination vous devriez ordre des lignes à l'aide d'un unique critèrescela permettra d'éviter de charger pour la page X une ligne que vous avez déjà chargé d'une page (Y !=X ).
A déjà répondu dans ici Mais permettez-moi de copypaste.
Veux juste résumer les réponses et commentaires. Il y a un certain nombre de façons de faire une pagination.
Avant oracle 12c, il n'y avait pas de DÉCALAGE/récupère la fonctionnalité, afin de prendre un coup d'oeil au livre blanc que l' @jasonk suggéré. C'est le plus complet de l'article que j'ai trouvé sur les différentes méthodes avec explication détaillée des avantages et des inconvénients. Il faudrait une quantité importante de temps à copier-coller ici, alors je veux le faire.
Il y a aussi un bon article de jooq créateurs expliquer certaines communes mises en garde avec oracle et d'autres bases de données de la pagination. jooq de l'article sur le blog
Bonne nouvelle, depuis oracle 12c, nous avons un nouvel OFFSET/récupère la fonctionnalité. OracleMagazine 12c de nouvelles fonctionnalités. Veuillez vous référer à "Top-N Requêtes et la Pagination"
Vous pouvez vérifier votre version oracle par l'émission de la déclaration suivante