Уникальный ключ, INSERT IGNORE и разбиение таблицы
Итак, у меня есть таблица:
CREATE TABLE `slots` (
`customerid` int(11) NOT NULL,
`orderid` int(11) NOT NULL,
`queueid` int(11) NOT NULL AUTO_INCREMENT,
`item_id` int(3) NOT NULL,
`variable1` int(3) NOT NULL,
`variable2` int(3) NOT NULL,
`variable3` int(3) NOT NULL,
`variable4` int(3) NOT NULL,
`variable5` int(3) NOT NULL,
`variable6` int(3) NOT NULL,
`variable7` tinyint(1) NOT NULL,
`variable8` tinyint(1) NOT NULL,
`variable9` tinyint(1) NOT NULL,
PRIMARY `queueid` (`queueid`),
UNIQUE KEY (`customerid`,`orderid`),
KEY `orderid` (`orderid`)
) ENGINE=InnoDB AUTO_INCREMENT=25883472 DEFAULT CHARSET=latin1
Это я хочу разделить по горизонтали по привычке. Проблема в том, что customerid и orderid должны образовывать уникальную комбинацию -> я создал уникальный ключ для этого и использую INSERT IGNORE, чтобы игнорировать вставки, которые приводят к дублированию строки.
Будет ли это работать с секционированной таблицей? Или это не помогло бы с моей скоростью вставки (я делю таблицу для достижения более высокой скорости INSERT, но мне все еще нужно следить, чтобы не вставлять одну строку несколько раз).
2 ответа
В документации по разделам есть, что сказать;
Все столбцы, используемые в выражении секционирования для секционированной таблицы, должны быть частью каждого уникального ключа, который может иметь эта таблица.
Другими словами, это будет работать до тех пор, пока вы customerid
, orderid
или оба, иначе ваш уникальный ключ недействителен.
В этом случае, если вы хотите разделить на основе customerId, а также сохранить UNIQUE KEY на customerId & orderId
Добавить customerId к вашему ПК
every unique key on the table must use every column in the table's partitioning expression. (This also includes the table's primary key, since it is by definition a unique key.
Таким образом, customerId должен быть частью как UNIQUE KEY, так и PRIMARY KEY.