2013-03-07 2 views
3

J'ai le tableau suivant avec une quantité énorme de données, c'est pourquoi je veux diviser ou partitionner. Le problème est que je veux partitionner par une colonne qui n'est pas une clé primaire: project_id. Dans mon cas, il y aura un maximum de 2 ou 3 différents ids de projet ...Mysql: Partitionnement avec Clé primaire

- id (PRIMARY KEY, AUTO INCREMENT) 
- project_id (INT) 
- username (UNIQUE) 
- username_md5 (UNIQUE) 
(- ... more but irrelevant columns) 

Comme vous pouvez le voir, je 3 colonnes que je dois garantir d'être UNIQUE (id, nom d'utilisateur, username_md5). Maintenant, je voudrais faire un partitionnement RANGE sur la colonne project_id. La seule solution que j'ai trouvée est de faire une clé PRIMAIRE 4-Colonne laide pour toutes ces colonnes (Partitionnement exige que toutes les colonnes dans l'expression de partitionnement doivent faire partie de chaque clé unique).

Maintenant, je me demande

A) est une clé primaire 4 colonnes très bien et utilisable?

B) Y a-t-il une meilleure solution pour mon partitionnement? C) sinon, je le ferais manuellement en créant une table «dynamique» pour chaque ID de projet que j'ai, pourrait-il être la solution la plus simple?

Répondre

1

Vous pouvez supprimer votre clé primaire/unique, et en faire une simple clé, et que faire une simple cloison de gamme sur le project_id, maintenant, il n'a pas besoin d'être la clé du tout

Vous aurez toujours accès rapide, puisque ces champs sont indexés.

Vous pouvez toujours vouloir préserver l'unicité:

  • le faire dans la couche d'application
  • faire en utilisant des inserts imbriqués avec sélectionne
  • vous pouvez utiliser table supplémentaire avec des contraintes uniques ajouté leur (seule la combinaison), maintenez s référence à la combinaison dans votre tableau
+0

Bonjour Michael, je ne comprends pas votre solution. Donc, je devrais laisser tomber ma clé primaire et créer une clé unique à la place? est-ce que la clé unique devrait également traverser les 4 colonnes? sinon, project_id ne peut pas être unique, alors quel type de clé dois-je utiliser pour cela? Merci de votre réponse. –

+0

@Benedikt, supprimez toutes vos clés primaires et uniques, et faites-les seulement la clé, lisez la différence entre 'key unique' et une' key' vous ne devez pas ajouter une nouvelle clé span, je ne pense pas que vous devez forcer project_id être unique en utilisant une clé unique, pourquoi devriez-vous, quelles requêtes exécutez-vous? – Michael

+0

cela fonctionne très bien, merci! Les 4 colonnes ont maintenant leur propre clé simple. Mais comment puis-je garantir que "username" et "username_md5" seront uniques? (id est autoincrement donc je suppose que ça ira bien). –