MySQL:5.6
我有 2 个表 - 一个有一个包含电子邮件地址的 VARCHAR 列,另一个有一个包含域名的 VARCHAR 列。
电子邮件地址示例:john@yahoo.co.uk 域名示例:yahoo.co.uk
我需要检索属于域表中域的电子邮件地址列表。
我怎样才能最有效地做到这一点?
提前感谢您的任何回复。
您应该能够JOIN
在两个表上LIKE
使用CONCAT
:
SELECT D.Domain, E.Email
FROM Domains D
JOIN Emails E ON E.Email LIKE CONCAT('%',D.Domain)
您可以LIKE
在此使用。(用于字符串匹配)
但是使用的问题LIKE
是它不使用列上提供的任何索引。这可能会在具有较小记录的数据库上执行得更好,但在已经包含数千条记录的大型数据库上性能会很差。这样做的原因是因为它会FULL TABLE SCAN
在非常慢的表上的每条记录上运行。
SELECT a.DomainName, b.EmailAdd
FROM DomainList a
INNER JOIN EmailList b
ON b.EmailAdd LIKE CONCAT('%', a.DomainName)
要进一步了解有关联接的更多信息,请访问以下链接: