Я пытаюсь создать раздел в MySQL на дату колонке MV_DATE
имеет тип DATE
MySQL секционирование по дате
Вот запрос -
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 имеет около миллиарда строк данных, что в значительной степени означает, что мои запросы вообще не возвращаются (фактически). Следовательно, нужно разбить таблицы.
Спасибо Дилана. Столбец 'MV_DATE' не может быть уникальным в моем случае. Ни один из столбцов в таблице не может быть уникальным, кроме фиктивного первичного ключа, который является целым числом автоматического приращения. По-моему, нет смысла в разбиении на разделы, поскольку я не использую его ни в одном из моих запросов. Разве нет другого способа разбить таблицу? – usert4jju7
Неправильно. '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). –
Рик прав. Неинеальный mv_date можно добавить в первичный ключ как составной первичный ключ. –