Come spiegato nel manuale:http://dev.mysql .com/doc/refman/5.6/en/partitioning-overview.html
Ciò è facilmente possibile tramite il partizionamento hash dell'output del mese.
CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
ENGINE=INNODB
PARTITION BY HASH( MONTH(tr_date) )
PARTITIONS 6;
Nota che questa partiziona solo per mese e non per anno, inoltre ci sono solo 6 partizioni (quindi 6 mesi) in questo esempio.
E per partizionare una tabella esistente (manuale: 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;
L'interrogazione può essere eseguita sia dall'intera tabella:
SELECT * from ti;
O da partizioni specifiche:
SELECT * from ti PARTITION (HASH(MONTH(some_date)));