sql >> Databasteknik >  >> RDS >> Mysql

MySQL-tabellpartition per månad

Som förklaras av manualen:http://dev.mysql .com/doc/refman/5.6/en/partitioning-overview.html

Detta är lätt möjligt genom hash-partitionering av månadens utdata.

CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
    ENGINE=INNODB
    PARTITION BY HASH( MONTH(tr_date) )
    PARTITIONS 6;

Observera att detta bara delar upp efter månad och inte efter år, det finns också bara 6 partitioner (så 6 månader) i det här exemplet.

Och för att partitionera en befintlig tabell (manual: 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;

Fråga kan göras både från hela tabellen:

SELECT * from ti;

Eller från specifika partitioner:

SELECT * from ti PARTITION (HASH(MONTH(some_date)));


  1. Bulk/batch uppdatering/upsert i PostgreSQL

  2. Använd flera konfliktmål i ON CONFLICT-satsen

  3. Använder du .aggregate() på ett värde som introducerats med .extra(select={...}) i en Django-fråga?

  4. Hur får jag den första veckodagen av ett datum i mysql?