У меня есть таблица с примерно 20 столбцами. 10 из них обычно имеют 1 из 15 возможных значений (по разному для каждого столбца). Кроме того, один столбец имеет довольно большую строку. В настоящее время таблица имеет более 3 миллионов строк и растет. Это около 1 ГБ (только данные)MySQL table split
- Я хотел бы отделить большой столбец текста, так как он не используется часто и, возможно, значительно уменьшит размер таблицы, что улучшит производительность.
- Я хотел бы «нормализовать» все эти повторяющиеся столбцы в отдельную таблицу (каждый), чтобы я мог получить список текущих значений без выполнения запросов 10
distinct
на строках 3М. Это займет много времени.
# 2 будет отношения «один ко многим». # 1 может быть 1-к-1 или 1-ко-многим. Мне все равно.
Вопрос в следующем: могут ли это выполняться с помощью простых операторов SQL? Как? Или мне нужно написать программу, чтобы поместить данные в новую таблицу и получить PK и вставить ее в правый столбец, по одной строке за раз?
Редактировать
Вот пример того, что я пытаюсь сделать:
ID Field1 Lookup Text
10 val1 look1 some very long text
11 val2 look2 more very long text
12 val2 look1 NULL
13 val4 look1 some very long text
.
.
.
Для этого:
ID Field1 Lookup Text
10 val1 1 1
11 val2 2 2
12 val2 1 0
13 val4 1 4 (1?)
.
.
.
Я добавил пример – baruch
Я отредактировал свой ответ на основе вашего примера. Обратите внимание, что с 3M строками инструкции alter могут занимать некоторое время. – rlanvin