0

1 つの内部選択から 2 番目の選択までの最初の 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);

クエリは有効なようですが、時間がかかります。なぜ、または何ができるのか考えていますか?2 番目のクエリの結果が最初のクエリに限定されていないためだと思われます。nameEmailObservations2 番目のクエリは、巨大であるため、それだけで長い時間がかかります。

4

1 に答える 1

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
于 2012-09-20T07:04:51.360 に答える