/ / Partizionamento MySQL per anno e settimana - mysql, partizionamento

Partizionamento MySQL per anno e settimana - mysql, partizionamento

Voglio usare le tabelle delle partizioni mysql per partizionareuna tabella in ANNO e il numero della SETTIMANA. So esattamente come farlo con le tabelle di unione mysql ma le tabelle delle partizioni sono diverse. Qualcuno può aiutare con il seguente schema di tabella?

CREATE TABLE `tableName` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`dateandtime` datetime NOT NULL,
`othervalue` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

Inoltre deve essere in un determinato motore?

E se immagazzino il dateandtime come int (10) timestamp come lo farei?

CREATE TABLE `tableName` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`dateandtime` int(10) NOT NULL,
`othervalue` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

risposte:

3 per risposta № 1

MySQL 5.1 non può fare partizionamento per data, quindi è necessario risolvere il problema ... Di solito si partiziona per funzione TO_DAYS(dateandtime), ad esempio in questo modo:

CREATE TABLE tbl ( ... ) ENGINE = InnoDB PARTITION BY RANGE (to_days (dateandtime)) ( PARTITION pNULL VALORI MENO DI (0) MOTORE = InnoDB, PARTITION p20111218 VALORI MENO DI (TO_DAYS ("2011-12-18")) ENGINE = InnoDB, PARTITION p20111225 VALORI MENO DI (TO_DAYS ("2011-12-25")) ENGINE = InnoDB, PARTITION p Nuovi valori MENO DI MAXVALUE ENGINE = InnoDB )

Ho definito qui 4 partizioni - la prima è giustaper completezza, in modo che l'inserimento della data in futuro non vada a buon fine. (Non è possibile INSERIRE un valore per il quale una partizione non esiste.) La prima partizione è per le prestazioni - I valori NULL verranno memorizzati in modo petitativo. Le partizioni middle 2 vengono effettivamente utilizzate, ognuna delle quali conserva una settimana di dati.

È possibile eliminare la vecchia partizione (questo è molto veloce rispetto alla semplice eliminazione di vecchie righe) utilizzando ALTER TABLE tbl DROP PARTITION xyz. Puoi aggiungere nuove partizioni dividendo l'ultima partizione:

ALTER TABLE tbl REORGANIZE PARTITION pNew INTO ( PARTITION p20120115 VALORI MENO DI (TO_DAYS ("2012-01-16")), ... PARZIALE p NUOVI VALORI MENO DI (MAXVALUE) );