SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 16.02.2013 01:51:58

PlayTime
Участник
Зарегистрирован: 16.02.2013
Сообщений: 2

Составление запроса для создания партиций.

Здравствуйте.
Есть таблица в которую каждый месяц добавляется около 600 000 записей. Все время с таблицы происходит селект и инсерт. Но селект происходит только за последние 24 часа. Решил создать для каждого года таблицу и эту таблицу разбить на партиции и субпартиции (месяц -> день).
Дата в таблице сохранена в формате дд.мм.гг . Но не могу создать никак правильный запрос. Для начала хотел разбить только по месяцам но все равно ничего не вышло. Думаю причина в формате даты.

Вот один из запросов который я составлял.

ALTER TABLE ip PARTITION BY date (
     PARTITION ip_1 VALUES LESS THAN(01.01.13),
     PARTITION ip_2 VALUES LESS THAN(01.02.13),
     PARTITION ip_3 VALUES LESS THAN(01.03.13)
);


Все остальные записи нужны реже но все таки должны быть доступны в любой момент.

Отредактированно PlayTime (16.02.2013 01:52:45)

Неактивен

 

#2 16.02.2013 18:07:49

PlayTime
Участник
Зарегистрирован: 16.02.2013
Сообщений: 2

Re: Составление запроса для создания партиций.

Вроде бы немного разобрался. Изменил формат даты в таблице так как такого типа записи не было в мануале. Теперь дата записана так: ГГГГ-ММ-ДД
Код для создания партиций изменил на такой:

ALTER TABLE ip PARTITION BY RANGE (MONTH(date))
(
 PARTITION ip_1301 VALUES LESS THAN (02),
 PARTITION ip_1302 VALUES LESS THAN (03),
 PARTITION ip_1303 VALUES LESS THAN (04)
);


Получаю ошибку: #1503 - A PRIMARY KEY must include all columns in the table's partitioning function

Вот структура таблицы:
+-------+--------------+------+-----+---------+----------------+
| Field   | Type             | Null   | Key  | Default  | Extra               |
+-------+--------------+------+-----+---------+----------------+
| id       | int(11)          | NO    | PRI | NULL       | auto_increment |
| owner | int(11)           | NO    |     | NULL        |                      |
| pic     | int(11)           | NO    |     | NULL        |                       |
| ip       | varchar(150)  | NO    |     | NULL        |                       |
| ref      | varchar(500)  | NO    |     | NULL        |                       |
| agent  | varchar(500)  | NO    |     | NULL        |                       |
| u_n     | varchar(1)     | NO    |     | NULL        |                       |
| date    | date             | NO    |     | NULL        |                       |
| code    | varchar(50)   | NO    |     | NULL        |                       |
+-------+--------------+------+-----+---------+----------------+

Апдейт.
Партиции по месяцам я сделал. Но вот теперь сделать субпартиции по дням уже не могу. Чувствую что нужно был все сразу создавать.

Отредактированно PlayTime (16.02.2013 20:52:04)

Неактивен

 

Board footer

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