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

Développement SQL Server Discussion :

Pourquoi une jointure affecte le tri ?


Sujet :

Développement SQL Server

  1. #1
    Membre habitué
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    420
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2004
    Messages : 420
    Points : 174
    Points
    174
    Par défaut Pourquoi une jointure affecte le tri ?
    Bonjour,

    Voilà tout est dit dans le titre.
    J'ai une requête avec plusieurs jointures sans ORDER BY.
    Lorsque je rajoute une jointure qui n'a rien de plus que les autres, je vois que l'order de restitution des lignes renvoyées est modifié et je ne comprends pas pourquoi.
    Avez vous une idée ?

  2. #2
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Bonjour,

    L'ordre a toujours été relatif selon SGBD utilisé ... donc seul un "order by" garantit le tri désiré.

    Note : Pour aller plus loin taper par exemple "The order of a SQL Select statement without Order By clause" dans un moteur de recherche
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Sans clause ORDER BY, le SGBD fait "ce qu'il veut".
    L'ordre dépendra du plan d'exécution, des indexes utilisés...
    En ajoutant une jointure, le plan d'exécution a de forte chances de changer, donc l'ordre du résultat aussi (ou pas).
    D'ailleurs cet ordre peut aussi changer sans que la requête soit modifiée, il suffit par exemple qu'un index soit ajouté, ou simplement que les statistiques sur les tables et/ou indexes soient mis à jour.

    Donc sans la clause ORDER BY, absolument rien ne garantit l'ordre d'arrivé des lignes dans le résultat.

    Tatayo.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par devdev Voir le message
    ... je vois que l'order de restitution des lignes renvoyées est modifié et je ne comprends pas pourquoi.
    Avez vous une idée ?
    Seul la clause ORDER BY permet de faire un tri des données du relsultat. Sans utilisation de cette clause, l'ordre des lignes est inconsistant et inconstant pour de nombreuses raisons :
    • Changement de plan d'exécution
    • différences dans les statistiques de distribution des données
    • présence ou absence d'index
    • parallélisme
    • ...


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [AC-2003] Affecter un tri sur une fonction Where
    Par nounous54 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 02/12/2013, 07h34
  2. Double Tri et une jointure
    Par IMTealk dans le forum PL/SQL
    Réponses: 1
    Dernier message: 11/10/2010, 13h46
  3. [Conception] Tri des tables dans une jointure
    Par Tonio_35 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/07/2006, 15h05
  4. Réponses: 7
    Dernier message: 27/07/2005, 17h34
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

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