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 :

SQL SERVER NON CLUSTURED INDEX sans la clef primaire, normal ou non


Sujet :

MS SQL Server

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 705
    Points : 934
    Points
    934
    Par défaut SQL SERVER NON CLUSTURED INDEX sans la clef primaire, normal ou non
    Bonjour
    Je regarde actuellement des plans d'executions avec Management Studio, il me propose de creer des INDEX sans la clef primaire de la table es ce normal ?

    Merci

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    La clef primaire est le plus souvent une colonne technique de type integer dénuée de sens.
    C'est ce qui garantit sa stabilité d'une part et ses performances d'accès d'autre part.
    Le fait d'avoir besoin d'index pour des recherches fréquentes sur des colonnes fonctionnelles est tout à fait légitime (en fonction des cardinalités), ce seront des index supplémentaires, le plus souvent non uniques.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 705
    Points : 934
    Points
    934
    Par défaut
    ok mais dans SQL SERVER les CREATE INDEX proposé ne l'inclus pas ?

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Par défaut seuls les index correspondant aux contraintes unique sont créés (et donc notamment l'index PK).
    Les autres doivent être créés manuellement quand le besoin est avéré.
    Il faut se souvenir que les index peuvent faciliter et accélérer les lectures quand ils sont pertinents et correspondent à des prédicats "sargables", mais qu'ils pénalisent toujours les mises à jour (delete, update, insert) et les servitudes (sauvegardes , réorg...).
    C'est pourquoi il faut ne créer que les index utiles (non redondants, filtrants, correspondants à des effectifs significatifs...)

  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 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    ...mais qu'ils pénalisent toujours les mises à jour (delete, update, insert) et les servitudes (sauvegardes , réorg...).
    C'est pourquoi il faut ne créer que les index utiles (non redondants, filtrants, correspondants à des effectifs significatifs...)
    Non, ça c'est faux....

    Un UPDATE, sauf s'il porte sur toute les lignes de la table, a besoin de se positionner sur les lignes à modifier... Sans index concernant le prédicat WHERE de l'UPDATE, la mise à jour nécessite un scan de table et sera donc beaucoup plus longue et donc moins performante. Idem pour un DELETE. Pour l'insert, cela na pas d'importance, car au moment de l'insert la ligne n'étant pas connue il n'y a aucune concurrence. Alors effectivement si cela dure plus longtemps, la gêne est minime, peu bloquante sauf pour les index uniques.

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

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Evidement : l'index permet d'atteindre plus facilement (si éligible) les lignes concernées par des update ou des delete, mais en contre partie, la maintenance de ces index lors de ces mêmes opérations a un coût, c'est ce que je voulais dire par "pénaliser".

    Il faut donc bel et bien en tenir compte pour ne pas créer un index non éligible qui ne présentera pas ce gain de recherche (ni en lecture, ni lors de delete ou update), mais présentera bien cet inconvénient de maintenance, quoi qu'il arrive !

Discussions similaires

  1. [SQL Server 2005] BULK INSERT sans effet
    Par mout1234 dans le forum Développement
    Réponses: 5
    Dernier message: 11/02/2009, 09h39
  2. SQL SERVER remplacer chaine vide sans update
    Par Alex35 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/11/2007, 13h40
  3. [SQL SERVER 2005] Comment vivre sans EXECUTE ?
    Par rarazor dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/06/2007, 11h16
  4. SQL Server 2000:Clustered Index et Shrink
    Par bédu1 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/01/2007, 14h45
  5. Sql Server Express - Probleme index unique et valeurs null
    Par Fayoul dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/02/2006, 17h22

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