none
Indexs sur table de faits RRS feed

  • Question

  • Bonjour,

    Dans une base sql server 2008, j'ai des tables de faits et des tables de dimensions.

    Je rencontre des problèmes avec les indexs (J'ai bien un index sur mes IDs de tables de dimensions et j'ai un index par ID (mes FK) dans ma table de faits).

    En effet, par exemple je fais une requête avec jointure entre ma table de faits et deux tables de dimensions dont la table période avec un group by sur une notion de période : le moteur ne tient pas compte de mes indexs et me propose de créer un index dans ma table de fait sur l'ID_PERIODE et de mettre en colonnes "incluses" les autres id (pointant vers les tables de dimensions) .

    Cela fonctionne, mais cela a deux inconvénients : l'espace utilisé pour stocker ces colonnes incluses dans l'index est important, et les performances en alimentation sont moins bonnes.

    Avez-vous une idée (paramétrage, autre stratégie d'indexation) pour éviter ces désagréments ?

     

    Merci d'avance,

    vendredi 19 novembre 2010 10:47

Réponses

  • Bonjour,

    Que les performances soient moins bonnes est tout à fait normal.. Il faut mettre à jour l'ensemble des index dans ce cas. Les index avec colonnes incluses sont un moindre mal par rapport aux index non cluster classiques car seul le niveau feuille de l'index comprend l'ensemble de la clé + colonnes incluses.

    Vous pouvez gagner du temps en insertion en désactivant votre index et le reconstruire par la suite. Vous pouvez également étudier le fait de changer la nature de vos index sur votre table de fait. Si l'ensemble de vos requêtes se font principalement sur un critère de période vous pouvez par exemple voir si en changeant votre primary key en clé non cluster unique d'une part et en créant votre index cluster en fonction de votre colonne de période si d'autre cela ne vous convient pas mieux.

    ++


    MCDBA | MCITP SQL Server 2005 / SQL Server 2008 | LPI Linux 1
    • Proposé comme réponse Alex Petrescu lundi 22 novembre 2010 14:32
    • Marqué comme réponse Alex Petrescu mercredi 24 novembre 2010 13:37
    vendredi 19 novembre 2010 13:16
    Modérateur

Toutes les réponses

  • Bonjour,

    Que les performances soient moins bonnes est tout à fait normal.. Il faut mettre à jour l'ensemble des index dans ce cas. Les index avec colonnes incluses sont un moindre mal par rapport aux index non cluster classiques car seul le niveau feuille de l'index comprend l'ensemble de la clé + colonnes incluses.

    Vous pouvez gagner du temps en insertion en désactivant votre index et le reconstruire par la suite. Vous pouvez également étudier le fait de changer la nature de vos index sur votre table de fait. Si l'ensemble de vos requêtes se font principalement sur un critère de période vous pouvez par exemple voir si en changeant votre primary key en clé non cluster unique d'une part et en créant votre index cluster en fonction de votre colonne de période si d'autre cela ne vous convient pas mieux.

    ++


    MCDBA | MCITP SQL Server 2005 / SQL Server 2008 | LPI Linux 1
    • Proposé comme réponse Alex Petrescu lundi 22 novembre 2010 14:32
    • Marqué comme réponse Alex Petrescu mercredi 24 novembre 2010 13:37
    vendredi 19 novembre 2010 13:16
    Modérateur
  • Bonjour,

     

    BI10, je vous remercie de nous confirmer si la réponse de mikedavem vous a été utile.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    lundi 22 novembre 2010 14:32