Как я могу использовать разделение таблиц MySQL на этой таблице? - PullRequest
0 голосов
/ 03 декабря 2009

У меня есть таблица, которая по сути выглядит так:

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, однако руководство говорит мне, что мне не разрешено:

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

Какие у меня есть варианты? Могу ли я все еще разделить таблицу?

Ответы [ 3 ]

3 голосов
/ 09 декабря 2009

Я написал сообщение в блоге об этой проблеме здесь Масштабирование Rails с разделением таблиц MySQL (rails использует целочисленные PK). Та же самая техника должна работать в вашем случае, за исключением того, что, к сожалению, вы должны удалить уникальный ключ [field1, field2, field3].

Удаление уникального ключа было проблемой, с которой я тоже сталкивался (хотя и не упоминался в посте). Я работал над этим, внедрив проверку существования перед созданием записи, понимая, что мы все равно будем время от времени получать дуплики из-за состояния гонки. На практике это не оказалось проблемой. Однако для увеличения пропускной способности запросов требуется увеличить размер буфера innodb, потому что операции ввода-вывода являются жестокими.

0 голосов
/ 03 декабря 2009

Если вы производите разбиение на основе года и месяца столбца datetime, задумывались ли вы о том, чтобы иметь таблицу для каждой комбинации год-месяц, а затем использовать таблицу слияния ? Я знаю, что это не дает прямого ответа на ваш вопрос, но подумал, что это может помочь ...

0 голосов
/ 03 декабря 2009

Нет, не в текущей форме.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...