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 :

Index multi-colonnes


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Index multi-colonnes
    Bonjour à tous,

    Je dois optimiser des programmes utilisant une base SQL Server. J'hésite concernant la manière de créer l'index le plus approprié. Dois-je prendre en compte le nombre estimé d'enregistrements pour déterminer l'ordre des clés de l'index ?

    Exemple : la table OFA_AFF (ordre de fabrication d'une ligne de commande, regroupant plusieurs sociétés) contient :
    IDT_SOC 1
    NUM_OFA 2
    NUM_CDE 3
    NUM_LIG 4
    NUM_SEQ
    QTE_TOT
    ...

    Les 4 premiers champs sont les clés de la table (index unique non cluster).
    IDT_SOC peut avoir une dizaine de valeurs différentes, pour chaque IDT_SOC on a plusieurs milliers de NUM_CDE ayant chacune plusieurs dizaines de NUM_LIG (NUM_CDE commence à 1 pour chaque IDT_SOC, NUM_LIG commence à 1 pour chaque NUM_CDE). Chaque NUM_LIG peut donner lieu à plusieurs NUM_OFA (commence à 1 pour chaque IDT_SOC).
    Je dois boucler sur OFA_AFF pour faire la somme de QTE_TOT pour une ligne de commande donnée (donc en fixant les valeurs de IDT_SOC, NUM_CDE et NUM_LIG).

    Quel est le meilleur index entre :
    - IDT_SOC, NUM_CDE, NUM_LIG, QTE_TOT
    - NUM_CDE, NUM_LIG, IDT_SOC, QTE_TOT
    Est-ce indifférent ?

    Je vous remercie par avance pour vos lumières.
    Bon week-end,
    Joël

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 809
    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 809
    Points : 52 867
    Points
    52 867
    Billets dans le blog
    5
    Par défaut
    Un index ne se pose pas in abstracto. Il se pose en fonction des requêtes...

    Or SQL Server est le seul SGB Relationnel a auto-diagnostiquer les index à poser et cela depuis plus de 15 ans...

    Il suffit donc de mettre ta base en exploitation, et au bout d'un temps raisonnable de lui demander les index à poser avec la requête suivante par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM sys.dm_db_missing_index_details
    Pour plus d'information sur le sujet, je t'invite à lire l'article que j'ai écrit à ce sujet :
    http://mssqlserver.fr/aide-au-diagno...ms-sql-server/

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Frédéric pour cette réponse.

    Je m'attendais plutôt à une réponse plus simple ...

    Je suis au niveau développement, je n'ai pas accès aux bases de données en production...Je vais faire remonter...

    Encore merci,

    Joël

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 380
    Points
    18 380
    Par défaut
    Pour le besoin décrit, les deux index vont être équivalent (la quantité étant dans la partie couvrante de l'index, pas la partie indexée).

    Mais on essaie d'utiliser le minimum d'index pour répondre au maximum de requêtes, c'est en ce sens que SQLpro vous répond qu'il vaut mieux laisser la base regarder tout ce qui se passe.

    De manière générale pour maximiser l'usage, les colonnes utilisées par le plus de requêtes sont à mettre en premier.

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Waldar, pour cette réponse, qui m'arrange.

    La plupart des tables ont déjà des index de type IDT_SOC, NUM_CDE... car le logiciel impose de choisir la société dans laquelle travailler.

    Bonne journée,

    Joël

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

Discussions similaires

  1. [XL-2013] Fonction INDEX EQUIV multi-colonnes
    Par terch dans le forum Excel
    Réponses: 9
    Dernier message: 23/04/2019, 16h56
  2. [MySQL-5.5] Index unique multi-colonnes et champ null
    Par coeur2lyon69 dans le forum Administration
    Réponses: 4
    Dernier message: 11/04/2017, 18h31
  3. Index multi colonnes ou plusieurs index
    Par Nadinette dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/03/2016, 12h06
  4. [2.x] Création Index Unique multi-colonne
    Par arcandre dans le forum Symfony
    Réponses: 2
    Dernier message: 22/04/2012, 18h05
  5. [Lazarus] Index multi colonne sous Lazarus et Sqlite
    Par ovni76 dans le forum Lazarus
    Réponses: 2
    Dernier message: 06/08/2009, 16h12

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