IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Paging optimisé Oracle


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut Paging optimisé Oracle
    Bonjour,

    Nous avons implémenté un système de paging basique, comme décrit dans la plupart des docs Oracle, sous forme d'inline views. Mais je trouve ça assez couteux et pas très efficace :-/ à part renvoyer un ResultSet plus petit ça n'allège pas vraiment le boulot du serveur DB.

    Après avoir parlé avec un copain, je me demandais si faire un truc du genre ne serait pas plus efficace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from TestTable where col > lastPreviousReturnedCol and rownum < 15 order by col
     
    où lastPreviousReturnedCol = valeur de col à la ligne 14

    Je ne sais pas si je suis clair? ^^ en fait prendre prendre les 15 prochaines lignes à partir de la dernière valeur renvoyée par la dernière requête.

    Ceci fonctionne évidemment si, par défaut, les colonnes sont 'processées' dans l'ordre par Oracle.

    Rhem... pas très clair ^^ ==> petit exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    TableA
    -------
    col1     
    aaa1    
    ddd2
    bbb3
    ccc4
    eee5
    si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from TableA where col1 > 'aaa1' and rownum < 3 order by col1
    va-t-il me renvoyer, dans l'ordre:
    bbb3
    ddd2

    ou est-ce que ça pourrait aussi être:
    ccc4
    eee5


    En gros, est-ce que Oracle va me renvoyer les premières valeurs 'juste plus grandes' ou n'importe lesquelles?

    Peut-être que ça dépend s'il y a un index ou pas aussi?

    Bon, j'espère que je n'embrouille pas trop tout ^^

    Merci

  2. #2
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    Damned, en réfléchissant j'ai déjà une petite idée de la réponse

    (mais si quelqu'un pouvait confirmer ^^)

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Pagination
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    select
            {list of columns}
    from    (
            select  {list of columns}, rownum rn
            from
                    ( {your select statement with order by} )
            where
                    rownum <= N * {your pagesize}
            )       v1
    where
            v1.rn > (N-1) * {your pagesize}
    order by
            rn
    ;

  4. #4
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    oui, c'est la méthode par 'inline views'...

    Mais je trouve ça couteux... vu qu'il doit quand même construire la view complète. C'est pour ça que je cherchais une 'astuce' plus efficace.

    Merci quand même.

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par bidi Voir le message
    ...

    Mais je trouve ça couteux... vu qu'il doit quand même construire la view complète. C'est pour ça que je cherchais une 'astuce' plus efficace.

    Merci quand même.
    ???

  6. #6
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    Peut-être ne suis-je pas dans le bon mais ce que je pense:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    SELECT
            col1
    FROM    (
            SELECT  col1, rownum rn
            FROM
                    ( select col1 from TableA where col1 < 5000 order by col1 )
            WHERE
                    rownum <= 4 * 15
            )       v1
    WHERE
            v1.rn > (4-1) * 15
    ORDER BY
            rn
    ;
    Le select en rouge va créer une inline view. si, cette inline view fait, mettons 10000 enregistrements, je n'en ai besoin que de 15 à la fois. Même si ça n'arrive pas chez le client, j'imagine qu'une inline view de 10000 enregistrement ça doit être difficile à digérer par Oracle non?

    Enfin, en écrivant,je me redis que c'est un peu bête... les requirements sont pourris ^^. Je ne vois pas trop l'intérêt de paginer un si grand nombre de résultats... mais bon, les utilisateurs... ^^

    Merci pour ton aide

Discussions similaires

  1. Pb accès console page web oracle 10g express
    Par samkiller dans le forum Installation
    Réponses: 1
    Dernier message: 01/08/2007, 17h26
  2. [Oracle 9i] Page HTML
    Par goplay dans le forum Oracle
    Réponses: 5
    Dernier message: 08/02/2006, 00h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo