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

MS SQL Server Discussion :

clé étrangère indexé?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut clé étrangère indexé?
    Bonjour,
    J'ai créé une table Intervention avec une clé primaire intervention_id, puis j'ai créé une table acte ayant sa clé primaire et une clé étrangère intervention_id.
    Est-ce que le fait de spécifier que le champ INTERVENTION_ID de la table ACTES est une clé étrangère suffit à indexer ce champ, ou est-ce qu'il faut que je créé un index non unique sur le champ INTEVENTION_ID de la table ACTE.

    En effet j'ai eu un doute, sur la base de production, les suppressions de tous les actes d'une intervention partent parfois en time out.
    D'un coup je me suis posé la question, puis j'ai posé la question à google, qui m'a répondu
    http://www.sql-server-performance.co...nce_audit7.asp
    Many people, when creating primary key/foreign key relationships (which are often used in JOINs) forget that while an index is automatically created on the primary key column(s) when it is established, an index for a foreign key is not automatically created, and must be created manually if there is to be one.
    Par ailleurs SQL Pro a écrit dans
    http://sqlpro.developpez.com/cours/s...ge=partie2#L10
    .
    La plupart du temps lorsque vous créez une contrainte de clef primaire, étrangère ou une contrainte d'unicité, le SGBDR implante automatiquement un index pour assurer la mécanisme de contrainte avec des performances correctes. En effet une contrainte d'unicité est facilité si un tri sur les données de la colonne peut être activé très rapidement.
    Mais c'était une remarque générale qui ne s'appliquait pas forcément à SQL Server.

    Je vous demande donc confirmation. Faut-il comme dit dans l'article créé manuellement un index sur les champs en foreign_key?

    Merci de votre aide
    Soazig

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Je viens de regarder un exemple dans une base personnelle : pas d'index sur la FK. D'ailleurs, je ne vois pas pourquoi cela serait obligatoire, si la FK sert à aller chercher un libellé, mais n'est pas un élément de recherche, l'index ne sert à rien, je ne vois guère que le DELETE du parent ("manuel" ou CASCADE) qui pourrait utiliser cet index (mais c'est rarement une activité quotidienne ) ; alors que l'index sur la PK sert à en assurer efficacement l'unicité et à garantir l'existence de l'enregistrement parent.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    je ne vois guère que le DELETE du parent ("manuel" ou CASCADE) qui pourrait utiliser cet index (mais c'est rarement une activité quotidienne Laughing ) ;
    Dans mon cas il y a bien suppression des fils puiis du père régulièrement.

    A+
    Soazig

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Il ne te reste plus qu'à créer l'index à la main .

    Pour information, dans un outil comme AMCDesignor (PowerAMC), il est possible choisir l'option "Seuil FK" qui permet de piloter la création des index sur les FK

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    je confirme MS SQL Server ne créer pas d'index sur une FK. En revanche il en créée une pour une contrainte d'unicité.

    Enfin, il lui arrive de créer des index sans le dire au cours de la "vie" de la base afin de se faciliter le travail. La création d'un index est parfois la solution la plus efficace pour traiter certaines requêtes. Ces index commencent par "_WA_Sys_"...

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

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

Discussions similaires

  1. Choix des index dans tables sans clés étrangères ?
    Par ctobini dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/01/2008, 09h56
  2. Réponses: 2
    Dernier message: 28/09/2007, 17h35
  3. Clé étrangère et index
    Par AdHoc dans le forum Requêtes
    Réponses: 7
    Dernier message: 14/06/2007, 16h52
  4. index et clef primaire et étrangère
    Par stos dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/09/2006, 08h59
  5. Suppression Index, Clés étrangères, etc....
    Par nodule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/11/2004, 09h42

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