Frage

Ich habe eine Tabelle, die im Wesentlichen wie folgt aussieht:

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)
)

würde Ich mag die Tabelle partitionieren basierend auf dem Monat und Jahr der theDate jedoch das Handbuch sagt mir, ich bin nicht erlaubt:

  

Alle Spalten in der Partitionierungsausdruck für eine partitionierten Tabelle verwendet wird, muss Teil jeder eindeutigen Schlüssel sein, dass die Tabelle haben. Mit anderen Worten muss jeder eindeutiger Schlüssel auf dem Tisch jede Spalte in der Partitionierungsausdruck der Tabelle verwenden,

Was sind meine Optionen hier? Kann ich die Tabelle noch partitionieren?

War es hilfreich?

Lösung

ich eine Blog-Post zu diesem Thema schrieb hier Skalierung Rails mit MySQL Tabellenpartitionierung (Schienen verwendet integer PKS). Die gleiche Technik sollte in Ihrem Fall arbeiten, es sei denn, leider müssen Sie die [Feld1, Feld2, field3] fallen eindeutigen Schlüssel.

Löschen einen eindeutigen Schlüssel war ein Problem, das ich mit zu behandeln (wenn auch nicht in der Post erwähnt). Ich arbeitete um es durch Umsetzung einer Existenzprüfung vor den Rekord zu schaffen, zu realisieren, dass wir noch gelegentlich Betrogenen aufgrund der Race-Bedingung bekommen würde. In der Praxis, das entpuppte nicht ein Problem sein. Allerdings benötigt die erhöhte Abfragedurchsatz der innodb Puffergröße weil die i / o der wir brutal sind Scaling-up.

Andere Tipps

Nein, nicht in der aktuellen Form.

Sie können den Primärschlüssel entfernen und stattdessen nur machen „id“ ein normaler Index. Der sekundäre eindeutige Index wäre immer noch ein Problem sein, und Sie würden es entfernen müssen oder das Partitionsschema ändern theDate Spalt einzubeziehen.

Wenn Sie auf das Jahr und Monat eines Datetime-Spalte basieren Partitionierung, haben Sie darüber nachgedacht, mit einem Tisch für jedes Jahr-Monat-Combo und dann mit einem Tabelle fusionieren? Ich weiß, das antwortet nicht direkt auf Ihre Frage, aber dachte, es kann helfen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top