У меня есть таблица, которая выглядит примерно так:
CREATE TABLE myTable (
id INT auto_increment,
field1 TINYINT,
field2 CHAR(2),
field3 INT,
theDate DATE,
otherStuff VARCHAR(20)
PRIMARY KEY (id)
UNIQUE KEY (field1, field2, field3)
)
Я хотел бы разбить таблицу на основе месяца и года theDate
, однако руководство говорит мне, m не разрешено:
Все столбцы, используемые в выражении разбиения для секционированной таблицы, должны быть частью каждого уникального ключа, который может иметь таблица. Другими словами, каждый уникальный ключ в таблице должен использовать каждый столбец в разделительном выражении таблицы
Каковы мои варианты здесь? Могу ли я разбить таблицу?
Я написал сообщение в блоге об этой проблеме здесь Масштабирование Rails с разбиением таблиц MySQL (rails использует целочисленные PK). Тот же метод должен работать в вашем случае, за исключением, к сожалению, вам нужно сбросить уникальный ключ [field1, field2, field3].
Удаление уникального ключа было проблемой, с которой я имел дело (хотя и не упоминался в сообщении). Я работал над этим, выполнив проверку существования перед созданием записи, понимая, что мы все равно будем периодически обманывать из-за состояния гонки. На практике это не оказалось проблемой. Тем не менее, увеличенная пропускная способность запроса потребовала увеличения размера буфера для индобокса, потому что я/я был жестоким.
Если вы занимаетесь секционированием в зависимости от года и месяца столбца datetime, подумали ли вы о наличии таблицы для каждого комбинированного года и затем используете таблица слияния? Я знаю, что это прямо не отвечает на ваш вопрос, но подумал, что это может помочь...
Нет, не в текущей форме.
Вы можете удалить первичный ключ и вместо этого просто сделать "id" нормальным индексом. Вторичный уникальный индекс по-прежнему будет проблемой, и вам нужно будет удалить это или изменить схему секционирования, чтобы включить столбец "Дат".