Задавайте вопросы, мы ответим
Вы не зашли.
Результат плачевный. Нельзя использовать такие разделительные функции. Это так?
Или у меня есть ошибка?
ALTER TABLE `dvsys_log`
PARTITION BY RANGE (`Date`) (
PARTITION p0 VALUES LESS THAN (CAST(DATE_SUB(current_date(), INTERVAL 6 DAY) AS datetime)),
PARTITION p1 VALUES LESS THAN (CAST(DATE_SUB(current_date(), INTERVAL 3 DAY) AS datetime)),
PARTITION p2 VALUES LESS THAN (CAST(DATE_SUB(current_date(), INTERVAL 2 DAY) AS datetime)),
PARTITION p6 VALUES LESS THAN (CAST(DATE_SUB(current_date(), INTERVAL 1 DAY) AS datetime)) -- MAXVALUE
)
partitions 4;
И второе. Раз делаешь разделы, то имеешь определенную цель. Скажем переключать партицию целиком на другую таблицу
ALTER TABLE dvsys_log
SWITCH PARTITION `function_dvsys_log_range`(@Date)
TO `dvsys_log_archive`
Такой возможности по переключению партиций на другую таблицу похоже нет. Или все же есть?
Или если бьешь на разделы таблицу и используешь insert into `dvsys_log_archive` ... from `dvsys_log`... , а затем delete from `dvsys_log`... , то движок сам просекает, чтобы сделать операции оптимальными и удалить целым разделом? Это я спрашиваю на всякий случай.
С уважением
Игорь
Отредактированно Igor Panshin (27.02.2009 16:16:50)
Неактивен
Ничего, кроме целочисленного разделения не выходит
SET @Boundary0=CAST(DATE_SUB(current_date(), INTERVAL 6 DAY) AS unsigned);
SET @Boundary1=CAST(DATE_SUB(current_date(), INTERVAL 5 DAY) AS unsigned);
SET @Boundary2=CAST(DATE_SUB(current_date(), INTERVAL 4 DAY) AS unsigned);
SET @Boundary3=CAST(DATE_SUB(current_date(), INTERVAL 1 DAY) AS unsigned);
set @cmd=CONCAT(' ALTER TABLE `dvsys_log` PARTITION BY RANGE (`Date_int`) ( PARTITION p0 VALUES LESS THAN (',@Boundary0,'),PARTITION p1 VALUES LESS THAN (',@Boundary3,'));');
PREPARE stmt FROM @cmd ;
EXECUTE stmt;
Неактивен
Разбиение таблиц по функциям — крайне странное желание. Разумеется, только целые числа.
Если нужно разбивать на фиксированное количество разделов по функции, то нужно выбирать
не RANGE, а, например, HASH. Впрочем, видимо, это не то, что нужно Вам
Встроенного переключения нет. Честно говоря, не могу себе представить, зачем это может быть
нужно. Могу себе представить, как это легко реализовать в случае MyISAM.
Движок не просекает, что хочется «удалить раздел целиком», т.е. будет удалять, а не truncatить.
С другой стороны, в соседние разделы он, конечно, не полезет.
UPD: Да, Вам таки подойдут много-много табличек с разными названиями с VIEW над ними.
Неактивен