Question

J'ai une table qui ressemble essentiellement à ceci:

CREATE TABLE myTable (
    id INT auto_increment,
    field1 TINYINT,
    field2 CHAR(2),
    field3 INT,
    theDate DATE,
    otherStuff VARCHAR(20)
    PRIMARY KEY (id)
    UNIQUE KEY (field1, field2, field3)
)

Je voudrais partitionner la table en fonction du mois et l'année de theDate, mais manuel me dit que je ne suis pas autorisé:

  

Toutes les colonnes utilisées dans l'expression de partitionnement d'une table partitionnée doit faire partie de chaque clé unique que la table peut avoir. En d'autres termes, chaque clé unique sur la table doit utiliser chaque colonne dans l'expression de partitionnement de la table

Quelles sont mes options ici? Puis-je partitionner encore la table?

Était-ce utile?

La solution

J'ai écrit un blog sur cette question ici Mise à l'échelle Rails avec le partitionnement de tables MySQL (rails utilise PK entier). La même technique devrait fonctionner dans votre cas, sauf, malheureusement, vous devez laisser tomber le [champ1, champ2, field3] clé unique.

La suppression d'une clé unique a été un problème je me suis occupé aussi (mais pas mentionné dans le poste). Je CONTOURNÉS par mis en place un contrôle d'existence avant de créer le dossier, se rendant compte que nous avions toujours obtenir des dupes occasionnels en raison de la condition de la course. Dans la pratique, qui ne se sont pas un problème. Cependant, le débit des requêtes plus nécessaire l'élargissement de la taille du buffer InnoDB parce que l'E / S nous sommes brutal.

Autres conseils

Non, pas sous la forme actuelle.

Vous pouvez supprimer la clé primaire et au lieu simplement faire « id » un index normal. L'index unique secondaire serait encore un problème et vous devez supprimer ce ou modifier le schéma de partitionnement pour impliquer theDate colonne.

Si vous partitionnement basé sur l'année et le mois d'une colonne datetime, avez-vous pensé à avoir une table pour chaque combo année mois, puis en utilisant un fusionner la table ? Je sais que cela ne répond pas directement à votre question, mais je pensais qu'il peut aider ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top