Раствор 1:
Использование Table1.email LIKE CONCAT('%@',Table2.domain).
БОЛЬШОЙ ЖИР КРАСНЫЙ ПРЕДУПРЕЖДЕНИЕ: это условие не индексируется. Если вам нужна скорость, разделите электронную почту на адрес и домен в таблице 1 и создайте индекс.
РЕДАКТИРОВАТЬ:
На самом деле это условие JOIN потребует сравнений count (email) xcount (domain), поэтому это, вероятно, самый медленный способ.
Решение 2:
У Роба есть очень хорошая мысль: более быстрый способ - извлечь домен из электронного письма (используя подстроку) и сопоставить его с индексом в таблице доменов
Раствор 3:
Лучший способ - проиндексировать домен электронной почты. В Postgres вы должны создать индекс функции ON extract_domain (электронная почта) (предположим, что вы создаете тривиальную функцию extract_domain ()), но вы не можете сделать это в MySQL, поэтому дополнительный столбец с доменом - это путь к скорости.
Если вы хотите знать все электронные письма в ОДНОМ домене,
Solution 1 : seq scan table emails + fast LIKE
Solution 2 : seq scan table emails + slightly slower domain extraction
Solution 3 : index scan table emails
Если вы хотите присоединиться к таблицам доменов для всех доменов / всех электронных писем:
Solution 1 : count(email)xcount(domain) comparisons, very slow
Solution 2 : seq scan table emails + index scan domains
Solution 3 : nested loop index join
Для полного JOIN было бы еще быстрее использовать соединение слиянием или хэш-соединение, но это не предоставляется mysql.