2016-03-21 2 views
0

Я пытаюсь создать раздел в MySQL на дату колонке MV_DATE имеет тип DATEMySQL секционирование по дате

Вот запрос -

ALTER TABLE table_name PARTITION BY RANGE (TO_DAYS(MV_DATE))(PARTITION p0 VALUES LESS THAN (TO_DAYS('2015-08-31'))); 

Я получаю ошибку A PRIMARY KEY must include all columns in the table's partitioning function

MV_DATE не является основным ключом моей таблицы.

Я также попытался ALTER TABLE JOB_VOL_SWH PARTITION BY RANGE ((MV_DATE))(PARTITION p0 VALUES LESS THAN (TO_DAYS('2015-08-31')));, который бросает ошибку ERROR 1659 (HY000): Field 'JB_DATE' is of a not allowed type for this type of partitioning

Я испытанный несколько вариантов сейчас, но никто не похоже на работу.

Есть ли специальный способ создания разделов по диапазонам дат? Таблица MYSQL имеет около миллиарда строк данных, что в значительной степени означает, что мои запросы вообще не возвращаются (фактически). Следовательно, нужно разбить таблицы.

ответ

2

19.6.1 Ключи разделения, первичные ключи и уникальные ключи

В этом разделе рассматривается взаимосвязь ключей разделения с первичных ключей и уникальных ключей. Правило, регулирующее эту взаимосвязь, может быть выражено следующим образом: все столбцы, используемые в разметке выражение для секционированной таблицы должны быть частью каждого уникального ключа , который может иметь таблица.

Другими словами, каждый уникальный ключ в таблице должен использовать каждый столбец в выражение разбиения таблицы. (.. Это также включает в себя первичный ключ таблицы, так как она по определению является уникальным ключом Данный случай обсуждается далее в этом разделе), например, каждый из после заявлений создания таблицы недопустим:

Ссылка:

https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-partitioning-keys-unique-keys.html

+0

Спасибо Дилана. Столбец 'MV_DATE' не может быть уникальным в моем случае. Ни один из столбцов в таблице не может быть уникальным, кроме фиктивного первичного ключа, который является целым числом автоматического приращения. По-моему, нет смысла в разбиении на разделы, поскольку я не использую его ни в одном из моих запросов. Разве нет другого способа разбить таблицу? – usert4jju7

+1

Неправильно. 'AUTO_INCREMENT' does_not_ должен быть сам по себе. 'PRIMARY KEY (id, mv_date)' отлично. Все потребности AI - найти «MAX (id)» при первом открытии таблицы; и что для этого достаточно ПК. Тем не менее, вы теряете чек для 'INSERTING' дубликата' id'. Но никто никогда этого не делает. [Подробнее о разделении, особенно 'BY RANGE (TO_DAYS (..))'] (http://mysql.rjweb.org/doc.php/partitionmaint). –

+0

Рик прав. Неинеальный mv_date можно добавить в первичный ключ как составной первичный ключ. –

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