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

DB2 Discussion :

FETCH FIRST xx ROWS ONLY


Sujet :

DB2

  1. #1
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Points : 49
    Points
    49
    Par défaut FETCH FIRST xx ROWS ONLY
    La commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FETCH FIRST xx ROWS ONLY
    permet de retourner xx enregistrements d'une table. Sur quoi se base cette commande pour retourner tels ou tels enregistrements ? Sur base de l'organisation physique de ceux-ci dans la table càd sur base de l'ordre d'insertion ?

    En gros, comment cela fonctionne-t-il ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Sur quoi se base cette commande pour retourner tels ou tels enregistrements ? Sur base de l'organisation physique de ceux-ci dans la table càd sur base de l'ordre d'insertion ?
    Oui, en effet, dans l'ordre d'arrivée des enregistrements dans le PF ou la table. En outre, il ne faut jamais utiliser de LF sur une instruction SQL.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Euuh, il n'y a pas d'ordre précis pour les données retournées par FETCH FIRST, celà dépend de l'humeur de l'optimiseur.
    D'ailleurs FETCH FIRST ou pas. Je m'explique :

    Si tu fais une requête simple sans clause WHERE ni ORDER BY, l'optimiseur va faire un SCAN de table, donc dans l'ordre du RRN (et non pas d'insertion).
    Alors, bien sûr, un FETCH FIRST te renverras les premiers enregistrements en fonction du RRN.

    Continuons sans clause ORDER BY mais avec cette fois ci une clause WHERE.
    Un WHERE filtrant disons moins de 20% d'enregistrements
    Ex WHERE SERVICE = 'A1'
    Sans index sur le service, tu verras les n premiers enregistrements en fonction du RRN car SCAN de table toujours. Rien n'a changé.
    Si on cree un index sur le service et le nom.
    Avec exactement la même requête, l'optimisateur va sûrement s'appuyer sur l'index pour filter les lignes.
    Mais cette fois-ci, les premières personnes du service retournées seront triées par ordre alpha (Index = Service + NOM)

    En résumé, quelque soit la requête, sans clause ORDER BY, c'est l'optimisateur qui va décider l'ordre des enregistrements à retourner, ce n'est pas prévisible.
    Sans ORDER BY, un jour un FETCH FIRST te renvoie qq chose, le lendemain celà peut-être totalement différent.

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Déjà dit mais je crois qu'on doit insister :

    Pas d'ORDER BY === >>> ordre de restitution indéterminé

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Ok, j'ai répondu un peu hâtivement, mais ordre d'arrivée ou RRN sont souvent abusivement confondus (par erreur j'en conviens) et je suis tombé dans le piège.
    Effectivement, sans ORDER BY, les lignes (enregistrements) sont retournées dans un ordre arbitraire

  6. #6
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Points : 49
    Points
    49
    Par défaut
    Merci à tous pour vos infos.

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

Discussions similaires

  1. FETCH FIRST x ROWS ONLY
    Par mcralcv dans le forum DB2
    Réponses: 1
    Dernier message: 05/05/2012, 15h45
  2. "fetch first 1 rows only" dans un "Left Join"
    Par nico.exe dans le forum DB2
    Réponses: 5
    Dernier message: 02/04/2012, 16h25
  3. Réponses: 6
    Dernier message: 30/10/2009, 09h19
  4. Fetch First : dans un select ?
    Par argv666 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/06/2006, 13h35
  5. DB2 Peut-on remplacer le FETCH FIRST par plus performant?
    Par souellet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/09/2005, 17h07

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