web-dev-qa-db-fra.com

La clé de partition doit-elle également faire partie de la clé primaire?

Je partitionne une table en fonction d'une colonne qui n'est pas une clé primaire? J'ai lu aujourd'hui des informations contradictoires sur la question de savoir si la colonne de partition doit faire partie de la clé primaire. Mon instinct dit non, mais je ne suis pas sûr à 100%. Alors des questions ...

  1. La colonne de partition doit-elle faire partie du primaire? Est-il recommandé dans un sens ou dans l'autre?
  2. Dois-je créer un index pour la clé de partition, ou le SGBD le fait-il automatiquement de lui-même?
24
AngryHacker

Pas du tout.

L'un des scénarios de partitionnement les plus courants consiste à utiliser un champ de date, qui n'a aucun lien avec votre PK.

Par exemple, si vous avez une table Orders avec le champ OrderDate, vous partitionnerez très probablement en fonction du mois et de l'année de OrderDate.

Lorsque les enregistrements expirent et ne sont plus pertinents, vous pouvez déplacer ces partitions vers une table d'archives ou une base de données afin qu'elles ne soient plus traitées.

Le partitionnement fonctionnera avec à peu près n'importe quel champ, mais pour qu'il fonctionne BIEN, le ou les champs sur lesquels vous partitionnez doivent être utilisés dans la plupart, sinon la totalité, de vos requêtes. Si vous n'incluez pas vos clés de partition, vous obtiendrez essentiellement une analyse de table coûteuse qui s'étend sur plusieurs tables (partitions).

MODIFIER

Pour la partie 2, je pense que la réponse est non également. La clé de partition est utilisée pour déterminer dans quelle partition mettre la ligne, mais je ne pense pas qu'un index soit maintenu. Il peut cependant y avoir des statistiques à l'arrière.

11
JNK

En plus de la réponse de JNK, vous devriez probablement lire cet article qui traite de l'alignement des partitions de table et des partitions d'index.

Il existe de nombreux types de scénarios dans lesquels le schéma de partitionnement suit exactement la première colonne de la clé primaire - par exemple dans un scénario d'entrepôt de données où la date d'instantané d'une table de faits est généralement la colonne de partition ainsi que la première colonne de la clé primaire.

Mais également, dans les environnements OLTP où le PK est une IDENTITY ou une autre clé de substitution, cela n'a pas de sens de l'utiliser pour la partition, car le partitionnement sur des nombres arbitraires n'est normalement pas terriblement utile. In = OLTP systèmes, vous avez également tendance à partitionner le plus par date (probablement pas dans le PK), mais potentiellement aussi régionalement ou par une sorte de division organisationnelle (peut-être dans le PK si vous n'utilisez pas une mère porteuse).

Mais ce n'est pas une exigence.

3
Cade Roux

Il doit faire partie d'une clé candidate s'il ne fait pas partie de la clé primaire elle-même. L'idée étant, votre partitionnement devrait s'aligner sur la clé primaire.

Donc, la réponse est oui, il est préférable de faire partie du PK. Si ce n'est pas une autre clé, ce qui est tout aussi bon pour être un PK.

0
srini.venigalla