(Diese Antwort geht davon aus InnoDB, nicht MyISAM. Es gibt Unterschiede bei der Umsetzung von Indizes, die einige meiner Kommentare falsch für MyISAM machen.)
In MySQL ein Tabelle PRIMARY KEY
kann aus mehreren Feldern bestehen, einschließlich einer AUTO_INCREMENT
.
Die einzige Anforderung in MySQL für AUTO_INCREMENT
ist, dass es die erste Spalte in einige Index sein. Lassen Sie uns an diesem Beispiel von Posts
schauen, wo es viele Beiträge für jeden Benutzer sein kann:
PRIMARY KEY(user_id, post_id),
INDEX(post_id)
wo post_id
ist AUTO_INCREMENT
, aber man konnte durch user_id
von „Clustering“ der Daten profitieren. Dieses Clustering wäre es effizienter machen Anfragen wie
zu tun
SELECT ... FROM Posts
WHERE user_id = 1234;
Zurück zu Ihrer Frage ...
Der „Partition Schlüssel“ muss nicht eindeutig sein; Ich verstehe also nicht, dass Sie "nicht auf doppelte Einträge partitionieren können".
INDEX(id, date)
, wenn Sie auch PRIMARY KEY(id)
haben, ist im Wesentlichen nutzlos. Wenn Sie nach ID suchen, erhalten Sie mit dem PRIMARY KEY(id)
einen perfekten Zugang. Hinzufügen von date
zu einem Index wird nicht helfen. Wenn man nach date
, , aber nicht id
sucht, ist (id, date)
nutzlos, da nur der "linke" Teil eines zusammengesetzten Indexes verwendet werden kann.
Vielleicht führen Sie zu einer nicht partitionierten Tabelle mit
PRIMARY KEY(date, id),
INDEX(id)
Datumsbereiche effizienter zu machen? (Hinweis: Partitionierung wird nicht helfen.
)
Vielleicht werden Sie tun
SELECT ... WHERE x = 123 AND date BETWEEN ...
In diesem Fall ist dies von Vorteil:
INDEX(x, date)
Nur wenn Sie dies tun, können wir den Nutzen der Partitionierung zu diskutieren beginnen:
WHERE x BETWEEN ...
AND date BETWEEN ...
Dies benötigt einen "zweidimensionalen" Index, der mit SPATIAL
existiert.
Siehe my discussion of partitioning wo ich nur 4 Anwendungsfälle für die Partitionierung auflisten. Es enthält auch eine Diskussion über die Verwendung von Partitionierung für 2D.
Bottom Line: Sie müssen nicht Partitionierungs diskutieren, ohne ein klares Bild von dem, was abfragt könnte es helfen. Stellen Sie sie zur Verfügung; dann können wir weiter diskutieren.