Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2010, 22h59   #1
Futur Membre du Club
 
Inscription : juin 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 73
Points : 17
Points : 17
Par défaut Importance de la ""position" de la clé primare dans une table

Bonjour,

Dans une base, j'ai une table dont la clé primaire porte actuellement sur une colonne de type varchar(50) qui est réutilisé comme clé étrangère dans d'autre table. Cette table contient également 2 autres champs.

Je souhaite modifier cette table et rajouter une colonne de type identité et placer la clé primaire sur cette colonne :
Code :
1
2
ALTER TABLE T_TEST ADD IdTest IDENTITY(1,1)
ALTER TABLE T_TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (IdTest)
Du coup cette colonne apparaît dans l'explorateur d'objet SSMS comme étant la 4eme colonne de la table ce qui apparaît également lorsque j'exécute la requête suivante (sc.id_column = 4) :
Code :
1
2
3
4
  SELECT sc.id_column, sc.name
  FROM sys.COLUMNS AS sc
       INNER JOIN sys.objects AS so ON so.object_id = sc.object_id
  WHERE so.name = 'T_TEST'
J'en viens donc à ma question est-ce que la "position" de la colonne sur laquelle porte la clé primaire est importante ? (performance des index ...)


Cordialement.
dens19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 23h14   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonsoir,

La position ordinale de la colonne n'a pas d'importance et n'est pas prise en compte dans l'index. Ce qui est important est l'ordre dans lequel vous avez défini vos colonnes dans l'index.

Code :
1
2
3
4
5
CREATE INDEX monindex
ON maTable
(
 col1, col2
)
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 02h11   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 663
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 663
Points : 8 697
Points : 8 697
Bonjour,

Je continue la phrase de Mikedavem : puisque les statistiques de colonne, qui permettent au moteur de base de données de déterminer la façon la plus rapide et la moins coûteuse de résoudre une requête, sont collectées sur la colonne la plus à gauche des colonnes qui constituent la clé de l'index

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h33.


 
 
 
 
Partenaires

Hébergement Web