MySQL быстро удаляет много строк - PullRequest
3 голосов
/ 05 июля 2011

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

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

Первая таблица содержит ~ 57 миллионов строк.Во второй таблице ~ 10 миллионов строк.

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

SELECT *
FROM db.first
WHERE id NOT IN (SELECT id FROM db.second)
DELETE FROM db.first
WHERE id IN (SELECT id FROM db.second)

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

1 Ответ

4 голосов
/ 05 июля 2011

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

select one.*
from db.first one
left join db.second two on one.id = two.id
where two.id is null

и удаление:

delete first
from first 
join second on first.id = second.id
...