Как эффективно объединить две большие таблицы MySQL? - PullRequest
2 голосов
/ 09 июля 2011

Вот моя проблема.У меня есть две таблицы MySQL, одна с 3,3 миллиона записей и одна с 700 000 записей.Все 700 000 записей, которые находятся во второй таблице, существуют в первой, и у этих двух таблиц есть один общий столбец.Я хочу выбрать * из обеих таблиц для всех 700 000 записей и вставить их в новую таблицу.Я создал индекс для обоих общих столбцов.Вот что я обычно делаю

INSERT INTO MergedTable (FirstName TEXT, LastName TEXT, Address TEXT) SELECT FirstNameFromTable1, LastName, Address FROM Table1, Table2 WHERE FirstNameFromTable1 = FirstNameFromTable2

Но размер таблиц приводит к зависанию этого оператора и в конечном итоге запрос прерывается.Любые идеи о том, как сделать это более эффективно?Для справки, вот команды, которые я использовал для создания двух рассматриваемых таблиц.Спасибо за вашу помощь.

CREATE TABLE Table1 ( FirstNameFromTable1 varchar(300), LastName TEXT, index(FirstNameFromTable1) );
CREATE TABLE Table2 ( FirstNameFromTable2 varchar(300), Address TEXT, index(FirstNameFromTable2) );

1 Ответ

0 голосов
/ 09 июля 2011

Chunk это:

insert into MergedTable (...)
select top 10000 ... from Table1,Table2
where FirstNameFromTable1=FirstNameFromTable2
and not exists (select * from MergedTable where FirstName=FirstNameFromTable1)

запускайте это, пока row_count () не станет равным 0, вам понадобится индекс для MergedTable.FirstName, очевидно,

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