Поскольку =
сокращает операцию объединения до одной подходящей строки из каждой таблицы (при условии, что эти документы уникальны).
Подумайте об этом так: вы танцуете с 5 мальчиками и 5девочки:
Adam Alice
Bob Betty
Charly Cathy
Dick Deb
Evan Elly
Вы соединяете их по первой букве.Итак,
Adam->Alice
Bob->Betty
etc...
Одна единичная пара
Но если вы объедините их с помощью "Первые буквы НЕ совпадают", вы получите:
Adam->Betty
Adam->Cathy
Adam->Deb
Adam->Elly
Bob->Alice
etc...
you 'Мы МАССИВНО увеличили количество пар.Вот почему ваш <>
запрос занимает так много времени.По сути, вы пытаетесь получить m x n
строк, а не просто min(m,n)
.Получив эти данные, вы получите 25 строк, а не 5. Для указанных размеров таблицы вы работаете с 77 000 * 2 700 000 = 207,9 миллиардов строк, минус 77 000, где совпадают два идентификатора, в общей сложности 207 899 923 000 строк вобъединенный набор данных.
с учетом требований вашего запроса, попробуйте выполнить левое соединение и найдите нулевые правые записи:
SELECT DISTINCT logs.DOCID
FROM logs
LEFT JOIN forms ON logs.DOCID = forms.DOCID
WHERE forms.DOCID IS NULL