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

Administration SQL Server Discussion :

Indexation des clefs étrangères : Un ou plusieurs indexes ?


Sujet :

Administration SQL Server

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut Indexation des clefs étrangères : Un ou plusieurs indexes ?
    Bonjour,

    Je continue mon travail d'apprentissage sur les indexes et je potasse donc cet article.

    Si l'exemple donné est clair, qu'en est-il lorsqu'une table T1 fait référence, via les colonnes C2, C3 et C4, respectivement aux tables T2, T3 et T4.

    Vaut-il mieux créé un index par clef ou bien un index commun ?

    Si j'ai bien compris, d'après le principe de vectorisation des index, je me dis qu'il vaudrait mieux créé un index clef mais je suis pas 100% convaincu par mon raisonnement.
    Kropernic

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Heu, dans l'absolu, je dirai ça dépend...

    L'intérêt de la création d'un index dépend des requêtes qui sont lancées sur la base.

    Si les 3 critères sont systématiquement dans la requête, il vaut mieux faire un index sur les 3 colonnes...

    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    C'est bien ce qu'il me semblait...

    Sinon, en théorie, si on voulait couvrir 100% des cas, il faudrait créer un index pour :

    • T2, T3, T4
    • T3, T4
    • T4

    De cette manière, l'index pour T2 est compris dans le premier et celui pour T3 dans le second.


    C'est correct ?

    Si cela est correct :

    Dans quelle mesure est-il préférable de créer plutôt les indexes suivant (peut-être que cela ne change rien) :

    • T3, T4, T2
    • T4, T2
    • T2
    Kropernic

  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 774
    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 774
    Points : 52 744
    Points
    52 744
    Billets dans le blog
    5
    Par défaut
    Si la table cible des index est très statique, alors créez tous les index !

    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
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Même chose que SQLPro si la table reste relativement très statique.

    En revanche on peut se demander si créer des index pour les cas suivants :

    T2, T3, T4
    T3, T4
    T4

    reste utile ou non par rapport à une potentielle sélectivité ...

    ++

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    En revanche on peut se demander si créer des index pour les cas suivants :

    T2, T3, T4
    T3, T4
    T4

    reste utile ou non par rapport à une potentielle sélectivité ...

    ++
    C'est une question que vous me posez ou plutôt une réflexion à méditer ?
    Kropernic

  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 774
    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 774
    Points : 52 744
    Points
    52 744
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    C'est une question que vous me posez ou plutôt une réflexion à méditer ?
    Les deux :
    1) si vous connaissez le fonctionnement de l'application à l'avance
    2) après coût par interrogation des stats des DMV du genre missing index.

    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
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    messieurs,

    j'avais cru comprendre que si l'on a ces 3 index

    IDX1=> T2, T3, T4
    IDX2=> T3, T4
    IDX3=> T4

    et que la requête ne "demande" que T2 et T4, ces 3 index ne serons pas pris en compte, ou peut être IDX1 pour le tri sur T2 ou IDX3 pour le tri sur T4

    ai je raison?
    Errare humanum est, perseverare diabolicum (Sénèque)

  9. #9
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    messieurs,

    j'avais cru comprendre que si l'on a ces 3 index

    IDX1=> T2, T3, T4
    IDX2=> T3, T4
    IDX3=> T4

    et que la requête ne "demande" que T2 et T4, ces 3 index ne serons pas pris en compte, ou peut être IDX1 pour le tri sur T2 ou IDX3 pour le tri sur T4

    ai je raison?
    Ah oui, je m'étais posé la question un plus tard mais j'ai oublié de venir demander confirmation...

    Merci à toi
    Kropernic

Discussions similaires

  1. Renommage des clefs étrangères
    Par mlwacosmos dans le forum PowerAMC
    Réponses: 1
    Dernier message: 17/12/2014, 22h38
  2. [MLD] Clef étrangère faisant référence à plusieurs tables?
    Par MiniJulie dans le forum Schéma
    Réponses: 8
    Dernier message: 14/02/2012, 11h09
  3. Clef étrangère faisant référence à plusieurs tables?
    Par MiniJulie dans le forum Débuter
    Réponses: 2
    Dernier message: 12/02/2012, 19h31
  4. Réponses: 2
    Dernier message: 28/09/2007, 17h35
  5. Intérêt des clefs étrangères
    Par nicoaix dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/07/2006, 11h28

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