我有一个请求和一个结果表。每个都有一个email_sha256列。
请求可能包含多个具有相同电子邮件的行,而电子邮件在结果中是唯一的。结果表中的电子邮件……
有EXISTS:
SELECT r.* FROM results r WHERE EXISTS ( SELECT 1 FROM requests WHERE email_sha256 = r.email_sha256 ) LIMIT 100
这将返回100个唯一行行 email_sha256 是 unique 在结果中。
email_sha256
unique
这通常有效但如果有多个请求使用相同的电子邮件,它可能会多次返回相同的结果。有没有办法确保我得到100个独特的结果而不是重复?
使用 GROUP BY 文件 。
GROUP BY
SELECT results.* FROM results INNER JOIN requests ON results.email_sha256 = requests.email_sha256 GROUP BY results.email_sha256 LIMIT 100
加入似乎很慢。有没有更好的方法来获得理想的结果。例如使用EXISTS?
没有,我们不能具体回答这个问题 一个解释 和/或 有关表格的信息 。但是,最可能的答案是您没有索引正确的列。
你应该有一个索引 JOIN 列和你的 GROUP BY 列)。在这种情况下是相同的 - results.email_sha256 和 requests.email_sha256 。
JOIN
results.email_sha256
requests.email_sha256
这是一个良好的开端还有很多更具体的Q& A on Stack Overflow关于MySQL缓慢返回的各种问题....