Исключающий запрос в mysql: not in против left join.

Добрый день.

Ситуация такая. Во первых мы имеем дело с большой таблицей debtors 3000-5000 записей. Мне нужно выбрать из этой таблицы записи только те, которые не входят в записи, получаемые другим запросом.

Сам запрос

Complete – база с обработанными debtors.
Notes – заметки к debtors.

Соответственно через notes идет связь между Complete и Notes по compl_note = note_id AND n_abon_id = users_id.
Сейчас в Complete и Notes по 500 записей но они будут расти до 10000 и больше.

Нагрузка на сервер получается дикая.

Как-то можно иначе составить запрос?

Отправился гуглить, наткнулся на пару полезных сайтов:
.RU – Webboard
sqlinfo.ru

Как ни странно ответили мне именно на втором. Отвечал пользователь deadka, действительно помог, а я получил безценный .

По запросу дал дампы баз и explain запросов. Было предложено добавить индексы.

добавьте составной ключ на deptors.users_id,deptors.is_juridical

И ключ на complete.compl_date

И составной ключ на debtors.is_juridical,debtors.block_start_date

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

Тогда я погуглил еще и нагуглил это:

1
подскажите как составить запрос который бы выводил только те поля из l_client где l_client.l_client_id != b_account.l_client_id?

2

имхо так.

На основе этого примера составили нужный мне запрос.

Мой запрос с – Showing rows 0 – 19 (20 total, Query took 2.8619 sec)

Запрос с LEFT JOIN
Showing rows 0 – 19 (20 total, Query took 0.0606 sec)

Разница на лицо. :)

Все уже внедрено в приложение и операторы могут спокойно обновлять страницу.

В дополнение получил совет, что все же можно успешно использовать not in с базой MariaDB, однако не думаю, что я буду это делать.