SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.06.2010 00:52:20

AlexsWulf
Участник
Зарегистрирован: 28.01.2010
Сообщений: 22

Помогите правильно составить запрос при разбиении на PARTITION

Доброго времени суток.
Есть таблица следующей структуры

CREATE TABLE `UserDecorsButic` (
  `decorButicUserId` bigint(20) unsigned NOT NULL auto_increment,
  `user_id` bigint(20) unsigned default '0',
  `decorButicId` int(10) unsigned default '0',
  `buticUserId` bigint(20) unsigned default '0',
  PRIMARY KEY  (`decorButicUserId`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

В таблице 10 мил. записей.

Хотелось бы разбить таблицу с использованием PARTITION на 10 частей по полю user_id.
Как правильно составить запрос?

Еще есть такие вопросы. На сколько данное разбиение поможет исходя из нагрузки на MySql и исходя из нагрузки на диски сервера?

Заранее благодарю за ответ.

Неактивен

 

#2 10.06.2010 01:33:28

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

Re: Помогите правильно составить запрос при разбиении на PARTITION

Всё зависит от того, как вы хотите ее разбить. Можно по HASH, можно по RANGE —
чего Вы пытаетесь добиться? Также учтите, что Вам нужно будет менять PRIMARY
KEY, чтобы он включал user_id (http://dev.mysql.com/doc/refman/5.1/en/ … -keys.html).

Неактивен

 

#3 10.06.2010 10:22:59

AlexsWulf
Участник
Зарегистрирован: 28.01.2010
Сообщений: 22

Re: Помогите правильно составить запрос при разбиении на PARTITION

Сложный вопрос чего я пытаюсь добиться.
В основном у меня сейчас проблемы в высокой нагрузке на диски сервера от базы.
Хорошо примари поменяю. Только как изменить примари чтоб поле decorStreetUserId так и осталось с автоикрементом?
Как лучше сделать HASH или RANGE?

Отредактированно AlexsWulf (10.06.2010 10:25:01)

Неактивен

 

#4 10.06.2010 15:14:43

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

Re: Помогите правильно составить запрос при разбиении на PARTITION

Зависит от того, что за таблица, как меняются данные. Например, если Вы хотите,
чтобы заполнялись все разделы, надо брать HASH. Если записи добавляются в
конец и Вы хотите, чтобы менялся один раздел — RANGE. Неплохо было бы смотреть,
что реально нагружает базу. Обычно изменение запросов улучшает производитель-
ность куда больше, чем разбиение.

Неактивен

 

#5 10.06.2010 15:44:32

AlexsWulf
Участник
Зарегистрирован: 28.01.2010
Сообщений: 22

Re: Помогите правильно составить запрос при разбиении на PARTITION

Нужно заполнять все разделы по пользователям.
Т.е. насколько я понял все данные одного пользователя будут находится в одном разделе.
Это HASH.

Если можно подскажите синтаксис написания запроса для данного случая.

А как можно посмотреть что грузит базу?

Неактивен

 

#6 10.06.2010 15:58:50

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Помогите правильно составить запрос при разбиении на PARTITION

paulus написал:

Также учтите, что Вам нужно будет менять PRIMARY
KEY, чтобы он включал user_id (http://dev.mysql.com/doc/refman/5.1/en/ … -keys.html).

Таки минуточку подождите.
Помнится, мы с тобой обсуждали RANGE на UNIXTIMESTAMP от колонки с датой. Дата нифига на уникальный ключ не похожа.
Получается, если хочешь PARTITIONING по дате (или вообще по чему-нибудь неуникальному), то в таблице не должно быть уникальных ключей? yikes

Неактивен

 

Board footer

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