Jak wyjaśniono w instrukcji:http://dev.mysql .com/doc/refman/5.6/en/partitioning-overview.html
Jest to łatwo możliwe dzięki podziałowi haszującemu danych wyjściowych miesiąca.
CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
ENGINE=INNODB
PARTITION BY HASH( MONTH(tr_date) )
PARTITIONS 6;
Zwróć uwagę, że to tylko partycje według miesiąca, a nie według roku, również w tym przykładzie jest tylko 6 partycji (a więc 6 miesięcy).
Oraz do partycjonowania istniejącej tabeli (instrukcja: https://dev.mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html ):
ALTER TABLE ti
PARTITION BY HASH( MONTH(tr_date) )
PARTITIONS 6;
Zapytania można wykonać zarówno z całej tabeli:
SELECT * from ti;
Lub z określonych partycji:
SELECT * from ti PARTITION (HASH(MONTH(some_date)));