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 :

Problème de création d'index


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut Problème de création d'index
    Bonjour,


    je dois placer des indexs, seulement je ne sais pas comment m'y prendre.
    Par exemple, j'ai deux requêtes :
    Une qui va chercher dans la colonne DateInit
    et une autre qui va chercher dans les colonnes DateInit et DateDeb.

    C'est un exemple parmi tant d'autres, mais ma question est : dans ce cas, pour une optimisation maximale, faut-il créer :

    -un index sur DateInit et un index sur DateDeb ?
    -un index sur DateInit et un index sur DateInit+DateDeb ?
    -un seul index sur DateInit+DateDeb ?

    Merci d'avance !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    petit tutorial à lire avant de se précipiter sur le forum
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Pour votre exemple précis le mieux serait la solution 3.
    Après si d'autres requêtes utilisent ces colonnes une autre approche pourra être effectuée.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut
    Merci pour lien que j'avais déjà lu et c'est pour ça que je viens ici

    Voilà l'exemple d'une requête qui pioche dans DateDeb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select t.idTache, t.tid, t.labo, t.etude, t.dateDeb, t.duree, t.libelle, t.dateInit, t.dureeInit, t.annotation, t.technicien, t.libelleInit, t.derniereModif, t.modifPar From Tache t Left Outer Join Periode p On (t.idPeriode = p.idPeriode) Where t.dateDeb >= ? And t.dateDeb < ? And p.niveau = ?
    et une autre qui pioche dans les 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select t.idTache, t.tid, t.labo, t.etude, t.dateDeb, t.duree, t.libelle, t.dateInit, t.dureeInit, t.annotation, t.technicien, t.libelleInit, t.derniereModif, t.modifPar From Tache t Left Outer Join Periode p On (t.idPeriode = p.idPeriode) Where ((t.dateInit is not null and t.dateInit >= ? And t.dateInit < ?) or (t.dateInit is null and t.dateDeb >= ? And t.dateDeb < ?)) And p.niveau = ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Au vue de ta requête 2, je dirais un index pour chaque colonne date, sans oublier un pour "niveau"
    Merci d'ajouter un sur les tags qui vous ont aidé

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut
    Mais du coup si vous me dites 50/50 je sais plus où donner de la tête

    Mais si je fais un seul index pour les deux dates, est ce que par exemple pour ma première requête qui n'utilise que DateDeb l'index servira à quelque chose ?

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Un index se place toujours entre le pouce et le majeur !

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

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut
    C'est pas faux

  9. #9
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par VinceSSJ Voir le message
    Mais si je fais un seul index pour les deux dates, est ce que par exemple pour ma première requête qui n'utilise que DateDeb l'index servira à quelque chose ?
    Tout dépend de comment est placé ton index. S'il est placé sur (DateDeb, DateFin), alors oui on peut se servir de cet index pour faire une recherche sur DateDeb. Sinon, alors ça dépend du nombre de valeurs que peut prendre DateFin.

    D'une manière générale, il suffit de se représenter l'index pour savoir si on peut s'en servir. Prenons un annuaire, qui est un index (Ville, Nom, Prenom) sur une partition (Département).
    Est-ce qu'il est pratique pour trouver toutes les personnes d'une même ville ? Oui.
    Est-ce qu'il est pratique pour trouver toutes les personnes d'un même nom sur le département ? Oui, parce que sinon je n'aurais pas d'autre choix que de parcourir toute la table. Mais il va quand même falloir que j'aille accéder à toutes les villes, qui sont assez nombreuses, c'est pas très pratique.
    Est-ce qu'il est pratique pour trouver toutes les personnes d'un même prénom ? Définitivement non, je vais de toute façon devoir scanner toute la table.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut
    MMmmmmhhhh.. Je comprends bien tes exemples, mais du coup j'ai du mal à les appliquer à mon exemple


    Pour la première requête, de toute façon, si la recherche s'effectue seulement sur DateDeb et que l'index est placé sur (DateBed, DateInit) , le DateInit ne sera pas pris en compte, si ?

    Sinon, aucune requête n'a de clause WHERE uniquement sur DateInit.
    C'est soit DateDeb+DateInit, soit seulement DateDeb

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Citation Envoyé par VinceSSJ Voir le message
    Pour la première requête, de toute façon, si la recherche s'effectue seulement sur DateDeb et que l'index est placé sur (DateBed, DateInit) , le DateInit ne sera pas pris en compte, si ?
    Si ton index porte sur (DateBed, DateInit) dans cet ordre, il sera utilisé pour toute recherche sur DateDeb.

    Citation Envoyé par VinceSSJ Voir le message
    Sinon, aucune requête n'a de clause WHERE uniquement sur DateInit.
    C'est soit DateDeb+DateInit, soit seulement DateDeb
    A mon avis tu peux créer un index sur (DateBed, DateInit). Ainsi il sera utilisé dans les deux cas, et accélèrera encore plus les recherches sur les deux dates.

    Tatayo.

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Pour poser des index il faut connaître plusieurs choses :
    1) les requêtes concernées. Vous les avez indiquées, c'est bien
    2) les index déjà existants (et notamment les contraintes PK et UIQUE).
    3) le SGBDR et sa version et effet, si Oracle ou SQL Server disposent d'un optimiseur haut de gamme capable d'utiliser très souvent les index à bon escient, ce n'est pas le cas de postGreSQL qui est souvent pris en faute et encore moins de MySQL...)
    4) il est parfois nécessaire de récrire la requête si votre SGBDR ne le fait pas, afin de rendre les prédicats de recherches "sargable". Lisez l'article que j'ai écrit à ce sujet : http://blog.developpez.com/sqlpro/p1...ql-sargable-c/

    Enfin, dans la 4e édition de mon ouvrage sur SQL, vous aurez le bonheur de constater qu'un chapitre nouveau d'environ 40 pages est consacré à ce sujet...
    Cette nouvelle édition doit paraître à la fin du mois...
    http://www.amazon.fr/SQL-%C3%A9ditio...9582752&sr=1-2

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

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    et hop

    je viens de le commander
    Merci d'ajouter un sur les tags qui vous ont aidé

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut
    Merci pour toutes ses précisions et ces liens !

    Le SGBD est SQL Server 2005 (et 2000 pour les autres serveurs).
    Le seul index créé sur la Table Tache était celui sur les pk (idTache+idPeriode).
    Sinon, pour la réécriture de la requête, je ne me lance pas là-dedans, l'application n'était pas de moi et ça serait risquer de toucher à tout ça

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Remarque quand même sur les requêtes : Elles font des jointures externes qui sont en fait des jointures internes parce qu'il y a une condition du WHERE qui porte sur la table externe.

    Voir mon blog pour plus d'explications.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Points : 35
    Points
    35
    Par défaut
    Et est ce qu'une jointure externe coute plus en "ressources" qu'un jointure interne ?

  17. #17
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Une jointure interne ne ramène que les lignes satisfaisant à la condition de jointure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM A
    INNER JOIN B ON condition
    => Seules les lignes de A et B satisfaisant la condition seront ramenées.

    Une jointure externe ramène toutes les lignes de la table interne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM A
    LEFT OUTER JOIN B ON condition
    => Toutes les lignes de A seront ramenées et seulement celles de B satisfaisant la condition.

    Ce serait à vérifier mais je pense qu'il est possible que l'index sur la table A ne soit pas systématiquement utilisé dans la jointure externe alors qu'il a toutes les chances d'être utilisé pour rechercher les lignes à lire dans la jointure interne.

    Il faudrait aussi tester si le comportement change avec une jointure externe + une condition de restriction dans le WHERE par rapport au transfert de la condition de restriction dans la jointure (dans le ON).

    Si des experts ont étudié la question, qu'ils se manifestent.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  18. #18
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Il faudrait aussi tester si le comportement change avec une jointure externe + une condition de restriction dans le WHERE par rapport au transfert de la condition de restriction dans la jointure (dans le ON).
    Bien sûr !!! pas du tout le même sens... Démonstration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE CLIENT (NOM VARCHAR(8))
     
    INSERT INTO CLIENT 
    VALUES ('DUPONT'),
           ('MARTIN'), 
           ('MULLER');
     
    CREATE TABLE ADRESSE (NOM VARCHAR(8), VILLE VARCHAR(16))
     
    INSERT INTO ADRESSE 
    VALUES ('DUPONT', 'LYON'), 
           ('MARTIN', 'PARIS');
    Requête 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT *
    FROM   CLIENT AS C
           INNER JOIN ADRESSE AS A
                 ON C.NOM = A.NOM;
     
    NOM      NOM      VILLE
    -------- -------- ----------------
    DUPONT   DUPONT   LYON
    MARTIN   MARTIN   PARIS
    --> 2 lignes
    Requête 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT *
    FROM   CLIENT AS C
           LEFT OUTER JOIN ADRESSE AS A
                 ON C.NOM = A.NOM;
     
    NOM      NOM      VILLE
    -------- -------- ----------------
    DUPONT   DUPONT   LYON
    MARTIN   MARTIN   PARIS
    MULLER   NULL     NULL
    --> 3 lignes
    Requête 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT *
    FROM   CLIENT AS C
           INNER JOIN ADRESSE AS A
                 ON C.NOM = A.NOM
    WHERE  A.VILLE = 'LYON';
     
    NOM      NOM      VILLE
    -------- -------- ----------------
    DUPONT   DUPONT   LYON 
    --> une ligne
    Requête 4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT *
    FROM   CLIENT AS C
           LEFT OUTER JOIN ADRESSE AS A
                 ON C.NOM = A.NOM
    WHERE  A.VILLE = 'LYON';
     
    NOM      NOM      VILLE
    -------- -------- ----------------
    DUPONT   DUPONT   LYON
    --> une ligne
    Requête 5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT *
    FROM   CLIENT AS C
           LEFT OUTER JOIN ADRESSE AS A
                 ON C.NOM = A.NOM
    WHERE  A.VILLE = 'LYON' OR A.VILLE IS NULL;
     
    NOM      NOM      VILLE
    -------- -------- ----------------
    DUPONT   DUPONT   LYON
    MULLER   NULL     NULL
    --> 2 lignes
    Requête 6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT *
    FROM   CLIENT AS C
           LEFT OUTER JOIN ADRESSE AS A
                 ON C.NOM = A.NOM 
                    AND A.VILLE = 'LYON';
     
    --> 3 lignes !!!
    NOM      NOM      VILLE
    -------- -------- ----------------
    DUPONT   DUPONT   LYON
    MARTIN   NULL     NULL
    MULLER   NULL     NULL

    Quelle différence entre requête 2 et 6 ?

    La première répond à la question : donnez moi tous les clients avec leurs éventuelles adresses.
    La seconde répond à la question : donnez moi tous les clients mais ne me montrez que les adresses de LYON !.

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

  19. #19
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ta démonstration correspond à l'article que j'ai écrit.

    Mais ce n'est pas de ce comportement là dont je demandais un avis d'expert, c'était sur celui de l'utilisation des index.

    Par exemple, si j'ajoute à la table CLIENT une colonne "COMMERCIAL" qui serait en fait une clé étrangère référençant le commercial qui suit le client et si je demande :
    "Sélectionne les clients suivis par BROUARD et avec leur adresse si tu la connais, Ô SGBD talentueux !"

    Requête 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT C.NOM, A.VILLE
    FROM CLIENT C
    LEFT OUTER JOIN ADRESSE A ON A.NOM = C.NOM
    WHERE C.COMMERCIAL = 'BROUARD'
    Requête 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT C.NOM, A.VILLE
    FROM CLIENT C
    LEFT OUTER JOIN ADRESSE A 
    	ON A.NOM = C.NOM
    	AND C.COMMERCIAL = 'BROUARD'
    Sur le plan de la logique de la requête, je préfère la première mais pourrait-il y avoir une différence entre les deux sur le plan de l'utilisation des index ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  20. #20
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Aucune, car cela dépend essentiellement des cardinalités estimées par les stats.

    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. Réponses: 2
    Dernier message: 24/08/2012, 14h20
  2. Problème de création d'index
    Par bivancha dans le forum SQL
    Réponses: 5
    Dernier message: 23/01/2012, 16h18
  3. [Debutant]Problème de création d'une vue indexée
    Par Le Pharaon dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2006, 12h50
  4. Problème de création de fenêtre
    Par tomateauketchup dans le forum DirectX
    Réponses: 1
    Dernier message: 08/06/2003, 19h42
  5. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07

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