У меня есть две таблицы InnoDB. У обоих есть столбец email, который проиндексирован.
Первые таблицы users — это 100 000 записей. Вторая таблица preview_movie составляет 1500 записей.
Я хочу получить все электронные письма, которых нет в таблице users, но которые существуют в таблице preview_movie.
SELECT a.email as email FROM `preview_movie` a
LEFT JOIN users c on c.email=a.email
WHERE c.email is NULL
Я пробовал этот вариант и все еще занимает много времени:
SELECT * FROM `preview_movie` a
WHERE NOT EXISTS
(SELECT email FROM users B WHERE B.email = a.email)
Этот простой запрос выполняется более 70 секунд. Как решить?
вы видели план запроса по объяснению выбора .... если у вас есть, покажите также результат объяснения
вы также проверяете кодировку и сопоставление каждого столбца, если они не совпадают, они не могут использовать индекс
Убедитесь, что у вас есть индексы по электронной почте в обеих таблицах preview_movie и users, и первый запрос должен работать быстро, пока количество пользователей с электронной почтой NULL невелико.






Вы пробовали использовать оператор MySQL EXPLAIN? Вероятно, много строк сканирования. Я не сразу вижу сырой первый не будет работать быстро.