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 :

ORDER et ROWNUM


Sujet :

SQL Oracle

  1. #1
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut ORDER et ROWNUM
    Salut,
    je suis sur Oracle 10g , et j'aurais voulu juste une précision.

    BoOn j'explique :
    J'ai une requete (tres basique) dont le but est de faire une selection sur 1 critere , et de renvoyer les X 1eres lignes ( via un rownum) ordonnées !

    Donc à priori la 1ere erreur ( ca je le savais mais c'est pas moi qui ai fait la requete ) ca a été de faire une requete du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  ID  FROM TABLE T
    where T.champs = XXXXXX
    and rownum <= 10
    order by ID
    A priori le order by se fait apres le rownum donc pas bon du tout. (ouais j'ai pété des têtes parce que ca fait 6 mois que je le répete lol )

    Mes questions sont les suivantes :
    1. Chez moi , ca a toujours marché, d'ou j'en deduis que mon select rownum me les renvoies tjours dans le bon ordre , y'a t il une raison a ca ? ( a part le pif et la chance sur 6 mois )
    2. Je compte remplacer la requete par qq chose du genre (que j'utilise souvent en fait ) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      SELECT  ID FROM (
      SELECT ID  FROM TABLE T
      where T.champs = XXXXXX
      order by ID )
      where rownum <= 10
      Ca marche, je teste sur une base toute petite donc les écarts de cout et de temps sont super négligeables. Mais selon vous est ce que le temps d'exécution peut en souffrir ?
    3. là aussi c'est bon , je souhaiterais juste une confirmation ( j'ai comme un doute d'un coup [ouais c'est le matin ] ), est ce que je devrais pas écrire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      SELECT  ID FROM (
      SELECT ID  FROM TABLE T
      where T.champs = XXXXXX
      order by ID )
      where rownum <= 10
      order by ID 




    Pour info je précise que mon "rownum" peut changer ( la valeur 10 est parametrable et peut passer de 10 à 50000 ou + selon les souhaits )

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4

  3. #3
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Euh, j'ai regardé avant de poster quand meme ....

    Ca repond peut etre au 3/

    Mais ca répond pas a ma question sur le plan et le cout ....

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pour l'ordre : En mode RULE, ton select passe par l'index sur ID. L'index est ordonné par défaut. En mode CHOOSE c'est pas sur qu'il passe par l'index.

    Voila pour le point 1

    Pour le point 2 : De toute façon tu n'as pas le choix ?
    Le plus coûteux c'est le tri (sauf si la colonne de tri est sur index)

    Pour le point 3 : C'est plus correct. Bien que normalement la lecture d'une vue triée se fasse dans l'ordre. Mais on sait jamais, ça peut changer suivant versions d'oracle.
    Problème : Tu te frappes 2 tris et ça c'est pas bon pour les perfs (surtout si tu ramènes 50000 lignes)

  5. #5
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Merci ...
    La colonne de tri est une clé primaire ( donc index ...)

    Je suis en 10g partout donc ca devrait pas changer ....
    Enfin en même temps il me récupéra les bons 1er éléments c'est déjà ca...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/02/2013, 15h23
  2. Erreur ROWNUM et ORDER BY
    Par jonathan8 dans le forum SQL
    Réponses: 5
    Dernier message: 22/05/2009, 19h43
  3. ORDER BY et Rownum
    Par dd16 dans le forum Oracle
    Réponses: 2
    Dernier message: 15/11/2006, 17h22
  4. PROGRESS- Obtenir le ROWNUM, ROWID, etc?!?
    Par nmathon dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/05/2003, 15h05
  5. ORDER BY dans un ordre inhabituel
    Par Riam dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/03/2003, 14h29

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