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 :

[SQL Serveur 2005]Foreign Key et Index


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de arthenius
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Par défaut [SQL Serveur 2005]Foreign Key et Index
    Bonjour tout le monde

    Voila je vous expose mon cas de conscience

    j'ai de grosses table (+4Millions de lignes) dans ces tables j'ai dans les 7-8 foreign key sans aucun index sur ces foreign key(qui pointent vers de petites tables de 10-100 enregistrement), 4-8 index différents qui me sont nécessaire pour faire tourner une panoplie de requete (principalement des procédure stockées / trigger)

    Mon souci c'est que lorsque que je tente de delete un enregistrement d'une table enfant(les petites tables), => je reçoit un time out => forcement le serveur parcourt ma grosse table pour voir si par hasard, l'enregistrement que je tente de supprimer serait pas utiliser...

    du coup la solution simple efficace et qui marche (puisque je l'ai tester et que c'est conseiller partout sur le net) j'ai rajouter un index sur la foreign key en question ==> plus de time out

    Oui mais voila si je met un index pour chaque foreign key de chacune de mes énormes tables, la présence de ces index ne vont-ils pas ralentir de manière significatives mes insert et autre updates sur ces grosses tables (puisque cela fera plus d'index a mettre à jour )??

    bref je me pose la question du gain évident sur un delete de child table, par rapport a la perte de temps des mises a jours d'index de grosses tables (qui sont bien évidement beaucoup plus sollicite que les child table) ?

    merci par avance de vos retours d'expérience en la matière

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    8 index pour une table c'est beaucoup trop.
    Cela indique soit une erreur de conception, soit une gestion des index inappropriée.

    Vous pouvez créer des index composites (sur plusieurs colonnes) mais il vous faut pour cela étudier lesquels conviendront le mieux.
    Notez qu'en version 2005, SQL Server vous permet de créer des index dont les colonnes ne sont pas des clés de tri au niveau feuille d'un index non-cluster avec la clause INCLUDE.

    mais voila si je met un index pour chaque foreign key de chacune de mes énormes tables, la présence de ces index ne vont-ils pas ralentir de manière significatives mes insert et autre updates sur ces grosses tables (puisque cela fera plus d'index a mettre à jour )??
    C'est exact, et même sur les DELETE.

    bref je me pose la question du gain évident sur un delete de child table, par rapport a la perte de temps des mises a jours d'index de grosses tables (qui sont bien évidement beaucoup plus sollicite que les child table) ?
    C'est à vous de voir :

    - soit votre table est faiblement modifiée (supposons qu'elle est insérée pendant les périodes de faible activité), et la plupart du temps elle est accédée en lecture seule : vous pouvez alors vous permettre dans une certaine limite d'avoir plusieurs index non-cluster sur cette table,

    - soit votre table est beaucoup modifiée, et dans ce cas vous devez réduire le nombre d'index, en les paramétrant avec l'option FILLFACTOR et éventuellement PAD_INDEX (si vous êtes sous SQL Server 2005)

    Rappelez-vous que trop d'index tue l'index

    @++

  3. #3
    Membre éprouvé Avatar de arthenius
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Par défaut
    Citation Envoyé par elsuket Voir le message
    - soit votre table est beaucoup modifiée, et dans ce cas vous devez réduire le nombre d'index, en les paramétrant avec l'option FILLFACTOR et éventuellement PAD_INDEX (si vous êtes sous SQL Server 2005)

    Rappelez-vous que trop d'index tue l'index

    @++
    je suis plutot dans ce cas la puisqu'il s'agit ni plus ni moins de mes tables de detail facture, commande, etc....
    bref il va falloir que je verifie ces index
    merci pour cet avis

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

Discussions similaires

  1. [SQL Serveur 2005] Deux index sur le même champ
    Par Griswold dans le forum Développement
    Réponses: 3
    Dernier message: 28/06/2010, 19h41
  2. Sql serveur 2005 et index full texte
    Par gueguenkevin dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/01/2008, 22h12
  3. Importer un fichier XML avec SQL serveur 2005
    Par thomasesteve dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/03/2006, 12h26
  4. Problème avec l'import DTS SQL Serveur 2005
    Par dlan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/03/2006, 12h47
  5. FOREIGN KEY et INDEX
    Par rsc dans le forum SQL
    Réponses: 2
    Dernier message: 19/07/2004, 10h06

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