Поиск отсутствующих записей в большой таблице

Arhat109

Есть таблица-справочник небольшого размера (около 50 000 записей.) Надо выбрать из неё все записи, данные о которых отсутствуют в другой таблице (около 5млн записей)... простой левый джойн у меня пропахал 15 минут и результата я так и не дождался... прибил нафиг.Традиционный русский вопрос:Чего делать?
6 ответов

Arhat109

Создать индексы, необходимые для быстрой отработки запроса.


Arhat109

Akina,... вроде есть все какие можно проставить. Дело в том что одна таблица лежит в одной базе, а другая - в другой (на "соседних" серваках)...Мне надо найти те записи, ну скажем товары, которые не попадали на склад последние 5 лет... при том что они в списке продаваемых - есть. Таблица записей о "попадалове" - содержит около 5млн. записей, продаваемых товаров 50тыщ...


Arhat109

... вроде есть все какие можно проставить. Дело в том что одна таблица лежит в одной базе, а другая - в другой (на "соседних" серваках)...
И это настолько секретно, что сразу сказать было нельзя...Во-первых, покажите DDL таблиц.Во-вторых, покажите запрос. И код установления связи с другим сервером. И укажите, какая таблица на локальном сервере, а какая на удалённом. И что по поводу этого запроса думает explain.В третьих - что мешает слить малую таблицу на второй сервер, там ЛОКАЛЬНО удалить записи, которые ЕСТЬ в большой таблице, и вернуть сухой остаток?


Arhat109

Akina,1. мешает NDA. Да и нет там ничего такого "сверхсложного" - типовой левый джоин малой таблицы с большой и поиск строк где big.id IS NULL...2. разово, наверное так и сделаю. Но это надо воткнуть в интерфейс, который будет раз в неделю (или чаще - как хозяин пожелает) делать аналогичную операцию по запросу. После предварительной выборки, догадываюсь что будет значительно проще...можно сделать спец.табличку найденных ранее... их надо не удалять, их надо просто выбрать и показать... и ведь не факт, что потом будет шустрее...3. делать можно как с одного сервака (где маленькая табличка), так и сдругого (где большая) - они рядом и доступ есть к обоим. Я пробовал с того, где меньшая.Щас вот попробовал предварительно сгруппировать большую табличку... получилось гораздо веселее - всего 1.5 секунды на поиск и минута на группировку во временную табличку. Похоже придется делать спец. табличку постоянной и по крону вносить в неё изменения каждый день... :(Может кто другие способы знает?


Arhat109

Настройте репликацию между серверами, реплицируйте копию малой таблицы. Один сервер эвентом туда кладёт новые записи, поступающие в маленькую таблицу. Второй эвентом удаляет оттуда записи, имеющиеся у него в большой таблице. Репликация обеспечивает передачу изменений с сервера на сервер. Всё это синхронизировано по времени.


Arhat109

Akina,пасибки. Почитаю про репликацию...