MYSQL Ошибка при выполнении разбиения на строковом столбце | Код ошибки: 1503 ПЕРВИЧНЫЙ КЛЮЧ должен включать все столбцы в функции разделения таблицы - PullRequest
1 голос
/ 10 января 2020

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

ALTER TABLE products  PARTITION BY LIST COLUMNS  (category) ( 
PARTITION category1 VALUES IN ('Battery Trays') ,
PARTITION category2 VALUES IN ('Auto Glass') ,
PARTITION category3 VALUES IN ('Bumpers AND Parts') 
);

Но он возвращает ошибку:

Error Code: 1503
A PRIMARY KEY must include all columns in the table's partitioning function

Вот структура моей таблицы

https://ibb.co/4jY9Tcv

Кто-нибудь знает правильный метод разбиения? Почему я должен включить PK для всех столбцов в таблице, как говорит ошибка?

1 Ответ

2 голосов
/ 11 января 2020

Секционирование не обеспечивает производительность. Не видя вашего SELECT, трудно дать вам прямой ответ. Мы можем обсудить, улучшит ли улучшение (например, «составное») производительность. Итак, давайте посмотрим и на индексы.

При добавлении (или удалении) разбиения необходимо перепроектировать все INDEXes, поскольку само разбиение обеспечивает (своего рода) второе измерение индексации.

Смотрите это, чтобы обсудить 4 варианта использования для разбиения: http://mysql.rjweb.org/doc.php/partitionmaint

В руководствах, вероятно, рассказывается, что можно сделать , но не стоит ли разделение стоит делает.

...