2012-01-13 3 views
3

Я хочу использовать таблицы разделов mysql для разбиения таблицы на YEAR и номер WEEK. Я точно знаю, как это сделать с таблицами слияния mysql, но таблицы разделов различны. Может ли кто-нибудь помочь в следующей схеме таблицы?Разбиение MySQL по годам и неделям

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

Также он должен быть в определенном двигателе?

И если я храню дату и время как метку времени (10), как бы я это сделал?

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; 

ответ

2

MySQL 5.1 не может сделать раздел по дате, так что вы должны вы обойти ... Обычно вы разделите с помощью функции TO_DAYS(dateandtime), например, как это:

 
CREATE TABLE tbl (
...) ENGINE=InnoDB 
PARTITION BY RANGE (to_days(dateandtime)) (
PARTITION pNULL VALUES LESS THAN (0) ENGINE = InnoDB, 
PARTITION p20111218 VALUES LESS THAN (TO_DAYS('2011-12-18')) ENGINE = InnoDB, 
PARTITION p20111225 VALUES LESS THAN (TO_DAYS('2011-12-25')) ENGINE = InnoDB, 
PARTITION pNew VALUES LESS THAN MAXVALUE ENGINE = InnoDB 
) 

я определил здесь 4 разделов - первый только ради полноты, так что вставка даты в будущем не подведет. (Вы не можете ВСТАВИТЬ значение, для которого не существует раздел.) Первый раздел предназначен для производительности - значения NULL будут сохранены там. На самом деле используются средние 2 раздела, каждый из которых хранит одну неделю данных.

Вы можете удалить старый раздел (это очень быстро по сравнению с просто удалением старых строк) с помощью ALTER TABLE tbl DROP PARTITION xyz. Вы можете добавить новые разделы, разделив последний раздел:

 
ALTER TABLE tbl REORGANIZE PARTITION pNew INTO (
    PARTITION p20120115 VALUES LESS THAN (TO_DAYS('2012-01-16')), 
    ... 
    PARTITION pNew VALUES LESS THAN (MAXVALUE) 
); 
+0

dateandtime должен быть частью ключа PRIMARY или UNIQUE справа? – Bretticus

+0

no ... Я использую для регистрации столов, которые имеют 12 + миллионы строк в день, так что также много строк за одну секунду, поэтому UNIQUE будет невозможно в моем случае. – Marki555

Смежные вопросы