Comme expliqué dans le manuel :http://dev.mysql .com/doc/refman/5.6/en/partitioning-overview.html
Ceci est facilement possible en partitionnant par hachage la sortie du mois.
CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
ENGINE=INNODB
PARTITION BY HASH( MONTH(tr_date) )
PARTITIONS 6;
Notez que cela ne partitionne que par mois et non par année, il n'y a également que 6 partitions (donc 6 mois) dans cet exemple.
Et pour partitionner une table existante (manuel : 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'interrogation peut être effectuée à partir de la table entière :
SELECT * from ti;
Ou depuis des partitions spécifiques :
SELECT * from ti PARTITION (HASH(MONTH(some_date)));