SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.02.2009 16:11:32

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

разделы таблиц

Результат плачевный. Нельзя использовать такие разделительные функции. Это так?
Или у меня есть ошибка?

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)

Неактивен

 

#2 27.02.2009 16:48:22

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Re: разделы таблиц

Ничего, кроме целочисленного разделения не выходит

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;

Неактивен

 

#3 28.02.2009 13:52:43

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: разделы таблиц

Разбиение таблиц по функциям — крайне странное желание. Разумеется, только целые числа.
Если нужно разбивать на фиксированное количество разделов по функции, то нужно выбирать
не RANGE, а, например, HASH. Впрочем, видимо, это не то, что нужно Вам smile

Встроенного переключения нет. Честно говоря, не могу себе представить, зачем это может быть
нужно. Могу себе представить, как это легко реализовать в случае MyISAM.

Движок не просекает, что хочется «удалить раздел целиком», т.е. будет удалять, а не truncatить.
С другой стороны, в соседние разделы он, конечно, не полезет.

UPD: Да, Вам таки подойдут много-много табличек с разными названиями с VIEW над ними.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson