web-dev-qa-db-fra.com

Quelle est la différence entre une clé primaire et une clé d'index

Quelqu'un peut-il me dire quelle est la différence entre une clé primaire et une clé d'index? Et quand utiliser quoi?

29
pavan

Une clé primaire est un type d'index spécial en ce que:

  • il ne peut y en avoir qu'un;
  • il ne peut pas être annulé; et
  • il doit être unique.

Vous avez tendance à utiliser la clé primaire comme identifiant unique le plus naturel pour une ligne (comme le numéro de sécurité sociale, l'ID de l'employé, etc.), bien qu'il existe une école de pensée selon laquelle vous devriez toujours utiliser une clé de substitution artificielle pour cela.

Les index, d'autre part, peuvent être utilisés pour une récupération rapide basée sur d'autres colonnes. Par exemple, une base de données d'employés peut avoir votre numéro d'employé comme clé primaire, mais elle peut également avoir un index sur votre nom de famille ou votre service.

Ces deux index (nom et département) interdiraient (probablement) les NULL et autoriseraient les doublons (presque certainement), et ils seraient utiles pour accélérer les requêtes à la recherche de toute personne portant (par exemple) le nom de famille 'Corleone' ou travaillant dans le département "HitMan".

41
paxdiablo

Une clé (super-clé minimale) est un ensemble d'attributs, dont les valeurs sont uniques pour chaque tuple (chaque ligne du tableau à un moment donné).

Un index est une fonction d'optimisation des performances qui permet d'accéder plus rapidement aux données.

Les clés sont souvent de bons candidats pour l'indexation et certains SGBD créent automatiquement des index pour les clés, mais ce n'est pas nécessairement le cas.

L'expression "clé d'index" mélange ces deux mots très différents et il vaut mieux éviter si vous voulez éviter toute confusion. "Clé d'index" est parfois utilisée pour signifier "l'ensemble des attributs d'un index". Cependant, l'ensemble des attributs en question n'est pas nécessairement une clé car ils peuvent ne pas être uniques.

17
nvogel

Oracle Database applique une clé UNIQUE ou une contrainte d'intégrité PRIMARY KEY sur une table en créant un index unique sur la clé unique ou la clé primaire. Cet index est créé automatiquement par la base de données lorsque la contrainte est activée.

Vous pouvez créer des index de manière explicite (en dehors des contraintes d'intégrité) à l'aide de l'instruction SQL CREATE INDEX.

Les index peuvent être uniques ou non uniques. Les index uniques garantissent qu'aucune ligne d'une table n'a de valeurs en double dans la ou les colonnes clés. Les index non uniques n'imposent pas cette restriction aux valeurs des colonnes.

Utilisez le CREATE UNIQUE INDEX instruction pour créer un index unique.

Spécification de l'index associé à une contrainte

Si vous avez besoin d'un contrôle plus explicite sur les index associés à UNIQUE and PRIMARY KEY contraintes, la base de données vous permet:

1. Specify an existing index that the database is to use 
   to enforce the constraint
2. Specify a CREATE INDEX statement that the database is to use to create 
   the index and enforce the constraint

Ces options sont spécifiées à l'aide de USING INDEX clause.

Exemple:

 CREATE TABLE a (
 a1 INT PRIMARY KEY USING INDEX (create index ai on a (a1)));

http://docs.Oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm

3
Kanagavelu Sugumar

D'autres réponses définissent la clé primaire, mais pas l'index primaire.

Un index primaire n'est pas un index sur la clé primaire.

Un index primaire est la structure de données de votre table, mais uniquement si votre structure de données est ordonnée par la clé primaire, permettant ainsi des recherches efficaces sans nécessiter une structure de données distincte pour rechercher des enregistrements par la clé primaire.

Toutes les bases de données (à ma connaissance) ont une clé primaire.

Toutes les bases de données n'ont pas d'index principal. La plupart de ceux qui ne construisent pas d'index secondaire sur la clé primaire par défaut.

0
Will Cross