2016-03-21 11 views
0

ich auf einer Datumsspalte eine Partition in mysql erstellen bin versucht MV_DATE ist vom Typ DATEmysql Partitionierung von Datum

Hier ist die Abfrage -

ALTER TABLE table_name PARTITION BY RANGE (TO_DAYS(MV_DATE))(PARTITION p0 VALUES LESS THAN (TO_DAYS('2015-08-31'))); 

ich den Fehler A PRIMARY KEY must include all columns in the table's partitioning function

MV_DATE ist nicht der Primärschlüssel meiner Tabelle.

Ich habe auch versucht ALTER TABLE JOB_VOL_SWH PARTITION BY RANGE ((MV_DATE))(PARTITION p0 VALUES LESS THAN (TO_DAYS('2015-08-31')));, die den Fehler ERROR 1659 (HY000): Field 'JB_DATE' is of a not allowed type for this type of partitioning

Ich habe ein jetzt ein paar Optionen versucht, wirft aber keine scheinen zu arbeiten.

Gibt es eine besondere Möglichkeit, Partitionierung nach Datumsbereichen zu erstellen? Die MYSQL-Tabelle hat fast eine Milliarde Datenzeilen, was ziemlich genau bedeutet, dass meine Abfragen (virtuell) überhaupt nicht zurückgegeben werden. Daher, um die Tabellen zu partitionieren.

Antwort

2

19.6.1 Partitionierungsschlüssel, Primärschlüssel und einzigartige Keys

In diesem Abschnitt wird die Beziehung von Partitionierungsschlüsseln mit Primärschlüssel und eindeutige Schlüssel. Die Regel, die diese Beziehung regelt, kann folgendermaßen ausgedrückt werden: Alle Spalten, die in dem Partitionierungsausdruck für eine partitionierte Tabelle verwendet werden, müssen Teil jedes eindeutigen Schlüssels sein, den die Tabelle haben kann.

Mit anderen Worten, jeder eindeutige Schlüssel in der Tabelle muss jede Spalte in Partitionierungsausdruck der Tabelle verwenden. (.. Dazu gehört auch die Primärschlüssel der Tabelle, da sie per Definition ist ein eindeutiger Schlüssel Dieser besondere Fall später in diesem Abschnitt beschrieben wird) Zum Beispiel kann jede der folgende Tabelle Erstellanweisungen ist ungültig:

Referenz:

https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-partitioning-keys-unique-keys.html

+0

Danke Dylan. Die Spalte 'MV_DATE' kann in meinem Fall nicht eindeutig sein. Keine der Spalten in der Tabelle kann eindeutig sein, mit Ausnahme des Dummy-Primärschlüssels, bei dem es sich um eine Ganzzahl mit automatischer Inkrementierung handelt. Es gibt keine Bedeutung bei der Partitionierung, da ich keine meiner Abfragen verwende. Gibt es keine andere Möglichkeit, die Tabelle zu partitionieren? – usert4jju7

+1

Falsch. Ein AUTO_INCREMENT muss nicht selbst sein. 'PRIMARY KEY (id, mv_date)' ist in Ordnung. Alle KI-Bedürfnisse müssen 'MAX (id)' finden, wenn Sie die Tabelle zum ersten Mal öffnen; und dass PK dafür ausreicht. Sie verlieren jedoch den Check für das Einfügen einer doppelten ID. Aber niemand macht das jemals. [Mehr zur Partitionierung, insbesondere 'BY RANGE (TO_DAYS (..))'] (http://mysql.rjweb.org/doc.php/partitionmaint). –

+0

Rick hat Recht. Das nicht eindeutige mv_date kann dem Primärschlüssel als zusammengesetzter Primärschlüssel hinzugefügt werden. –