Правильный MySQL способ добавить столбец из одной таблицы в другую - PullRequest
5 голосов
/ 07 марта 2011

У меня есть большая таблица (~ 10 миллионов записей), которая содержит несколько ключей в другие, меньшие таблицы.Ключи уникальны в каждой из маленьких таблиц, но не в большой.Я хотел бы добавить столбец в большую таблицу из одной из меньших таблиц на основе сопоставления ключей, но я не уверен в «правильном» способе сделать это.У меня есть решение, которое работает, но оно занимает достаточно много времени (хотя это может быть неизбежно) и просто не кажется, что это оптимальный способ сделать это.Вот что у меня есть:

CREATE TABLE new_big_table LIKE big_table;
ALTER TABLE new_big_table ADD(new_column TINYINT NOT NULL);
INSERT INTO new_big_table SELECT big_table.*, smaller_table.my_column
  FROM big_table JOIN smaller_table ON big_table.key1 = smaller_table.key1
  AND big_table.key2 = smaller_table.key2;

Это делает работу, но пахнет так, будто я все делаю неправильно.Кажется, как минимум, мне не нужно создавать дубликаты таблицы, чтобы сделать это.Есть ли какой-то более прямой (и более эффективный?) Способ сделать это?

Возможно, стоит упомянуть, что это для личного, хобби проекта дома, так что я могу свободно использовать все ресурсымашина (так как я единственный использующий ее).Поэтому, если есть какие-либо простые советы по настройке производительности для подобных вещей, я буду признателен за них (я экспериментирую с этим на экземпляре Amazon EC2, поскольку он должен быть намного быстрее и иметь больше памяти, чем мой персональный компьютер).

1 Ответ

5 голосов
/ 07 марта 2011

Вы пытались добавить столбец на месте?

alter table big_table add new_column tinyint;

update  big_table bt
join    smaller_table st
on      bt.key1 = st.key1
        and bt.key2 = st.key2
set     bt.new_column = st.my_column;

alter table big_table modify new_column tinyint not null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...