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

Langage SQL Discussion :

[WHERE] Quelle est l'incidence de l'ordre des filtres ?


Sujet :

Langage SQL

  1. #1
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut [WHERE] Quelle est l'incidence de l'ordre des filtres ?
    Bonjour,

    Je suis en train de me poser une question à laquelle je n'ai pas encore trouvé de réponse dans ce forum.

    Pour information, je travaille avec le SGBD Sybase (si cela à une incidence sur la réponse).

    Ma question est : dans la clause WHERE, est ce que l'ordre des filtre à une incidence ? Ou quelque soit le nombre de filtres, ils sont tous contrôlés ?

    Je m'explique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ...
    FROM matable
    WHERE filtre1
    AND filtre2
    Dans cet exemple, nous avons le filtre1 qui est plus restrictif que le filtre2.
    Le moteur va scanner la table enregistrement par enregistrement car aucun index n'apparaît dans les filtres. Comment il va réagir :
    1) si filtre1=faux, on passe à l'enregistrement suivant
    si filtre1=vrai, seulement dans ce cas on regarde filtre2
    2) si (filtre1 and filtre2) = faux, on passe à l'enregistrement suivant. Quelque soit la valeur de filtre1, on traite filtre2

    Merci d'avance pour vos réponse...

    PS : j'espère avoir été clair
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  2. #2
    ms7
    ms7 est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 114
    Points : 66
    Points
    66
    Par défaut
    Salut,

    Je pense que la clause AND en langage SQL est tres explicite...

    Si la condition A et la condition B sont realise, alors vrai....Dans tout les autres cas c´est faux.

    Je ne pense pas que l´ordre ait de l´importance avec la clause AND, car justement les 2 conditions doivent etres vraies....donc aucune importance que l´on test la condition A ou B en premier...Je pense que c plutot

    1) si filtre1=faux, on passe à l'enregistrement suivant
    si filtre1=vrai, seulement dans ce cas on regarde filtre2


    J´espere t´avoir aide

  3. #3
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Justement, si on est dans le cas que tu proposes, l'ordre a de l'importance.
    Surtout si le filtre 1 fait référence à un index et pas le filtre 2.
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  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 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Aucun !

    En effet les SGBDR moderne comme Oracle, Sybase, SQL Server, DB2 ont des optimiseurs qui vont décider d'exécuter telle ou telle branche de l'algorithme de résolution en premier en fonctions des statistiques sur les données des tables.

    Tant et si bien que la même requête pourra avoir des plans d'exécution différents en fonction de la volumétrie des données dans les tables et de la dispersion des données.
    Tant et si bien aussi que la même requête avec des valeurs différentes pour les critères n'aura pas forcément le même plan d'exécution.

    Donc cette question et vaine, mais la morale de cette hsitoire est que l'optimiseur est une des grandes forces des SGBDR...

    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/ * * * * *

  5. #5
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Merci Frédéric pour ton intervention...

    C'est exactement la réponse que j'attendais mais je ne trouvais nulle part.
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Bonjour MashiMaro
    Citation Envoyé par La règle du forum
    Ce forum général SGBD est consacré aux discussions comparatives entre les SGBD, et sur les concepts généraux aux SGBD.

    Règles
    - Si vous souhaitez parler d'un SGBD en particulier, postez votre message dans le forum correspondant (Access, MySQL, Interbase...) S'il ne rentre dans aucun de ces forums, merci de le placer sur Autres SGBD et non pas Général SGBD.

    - Si votre message concerne les requêtes SQL, veillez à le placer sur le forum intitulé Langage SQL. ...
    voir > http://www.developpez.net/forums/viewtopic.php?t=67792

    Soyez rigoureux quant aux respects des règles du forum, elles vous garantissent également les réponses les plus appropriées à résoudre votre souci, tout en veillant à ne pas incommoder inutilement les professionnels qui donnent benevolement de leur compétence à vous répondre.

    Exceptionnellement, je déplace votre post dans le forum approprié Langage SQL
    Conformément à la règle décrite dans le lien ci-dessus, je supprimerai tout autre post non conforme. Si par inadvertance, vous vous aperceviez d'une erreur de postage de votre part, n'hésitez pas à me contactez par mp, ou un autre collègue modérateur afin que nous vous aidions à déplacer votre post (afin d'eviter le multipostage lui même proscrit)

    Très Cordialement neguib
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/03/2010, 21h42
  2. Réponses: 9
    Dernier message: 19/04/2007, 09h34
  3. Réponses: 8
    Dernier message: 27/11/2006, 18h24
  4. Réponses: 5
    Dernier message: 17/08/2006, 10h10
  5. [Requete][Where] Quelle est l'utilité d'une clause: 1=1 ?
    Par alpachico dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/12/2005, 18h40

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