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

0

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

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 не разрешено:

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

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

Теги:
partitioning

3 ответа

3
Лучший ответ

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

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

  • 0
    спасибо за идеи.
0

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

  • 0
    Привет Литол, я подумал об этом, однако я слышал, что они на самом деле медленнее, чем просто один большой стол. У вас есть идеи?
0

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

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

  • 0
    какая огромная пита. :-(

Ещё вопросы

Сообщество Overcoder
Наверх
Меню