我正在尝试将一个内部选择的前100个结果加入到第二个内部。
我的例子有点做作,但我有一个电子邮件地址表,其中一些被标记为脏,以及一个观察表,我将电子邮件和名称映射到(它们都包含主要密钥)表)。我希望结果是每个电子邮件地址的不同名称的数量。
SELECT ea.email, tmp.uniques FROM
(SELECT email FROM emails WHERE dirty = 1 LIMIT 100) ea
INNER JOIN
(SELECT email, COUNT(DISTINCT(name)) as uniques FROM nameEmailObservations GROUP BY email ) tmp
ON (tmp.email = ea.email);
查询似乎有效,但需要很长时间。知道为什么或我能做什么?我怀疑这是因为第二个查询的结果不限于第一个查询。第二个查询确实需要很长时间,因为nameEmailObservations
很大。
答案 0 :(得分:1)
当然:
SELECT
e.email,
COUNT(DISTINCT neo.name)
FROM
emails e
INNER JOIN
nameEmailObservations neo
ON
e.email = neo.email
WHERE
e.dirty = 1
GROUP BY
e.email
LIMIT 100
你正在尝试做什么?
如果导致问题的LIMIT
(即仅在查询结束时应用),那么:
SELECT
email,
COUNT(DISTINCT name)
FROM
nameEmailObservations
WHERE
email IN
(SELECT email FROM emails WHERE dirty = 1 LIMIT 100)
GROUP BY
email