gismo_: SQL:Statment brauch 2Minuten

Hallo Leute,

könnt ihr mir bitte bei diesem Select helfen:

SELECT
    t.Anrede,
    t.TN_NR,
    t.Vorname,
    t.Nachname,
    t.Email,
    t.angemeldet,
    COUNT(b.TN_NR) as anz,
    t.Sourcing_Bewerber
    FROM Teilnehmer as t LEFT JOIN Bewertung_Extern as b ON t.TN_NR =
b.TN_NR
    WHERE (t.angemeldet < DATE_SUB(CURDATE(),INTERVAL 30 DAY))
    AND (t.Sourcing_Bewerber = 'ja')
    AND (b.status=2 OR b.id IS NULL)
    GROUP BY t.TN_NR HAVING anz < 3

Die Tabelle hat t.15.000 und b.80.0000 Einträge. Der Select dauert über 2 Minuten. Das mir bissel lang. Wenn ich es als Inner Join mache, dann brauch das Statement nur 5 SEKUNDEN, allerdings bekomme ich dann keine IS NULL Einträge aus der Tabelle Bewertungen_Extern.

Gruß
gismo_

  1. Hi,

    äh, ja .. was willst du denn eigentlich genau wissen, versuch einfach das Ergebnis zu beschreiben, was du gern hättest.

    Bevor du die ganzen 80.000 Datensätze in B joinst, solltest du sie vielleicht mit dem sowieso verwendeten (b.status=2 or b.Id IS NULL) verringern. à la   ... LEFT JOIN (SELECT TN_NR FROM Bewertung_Extern WHERE (status=2) or (id is null)) as b ...

    Wobei mir nicht ganz klar wird wie b.id <null> sein kann, dann gäbe es doch gar keinen Datensatz.

    Außerdem, mit welchen Datenbanksystem arbeitest du?

    Ciao, Frank

    --
    I don't want to be a regular of this forum.

  2. Moin gismo,

    Die Tabelle hat t.15.000 und b.80.0000 Einträge. Der Select dauert über 2 Minuten. Das mir bissel lang. Wenn ich es als Inner Join mache, dann brauch das Statement nur 5 SEKUNDEN, allerdings bekomme ich dann keine IS NULL Einträge aus der Tabelle Bewertungen_Extern.

    hierzu fallen mir zwei Dinge ein, vieleicht ist es ja schon so aber es sollte in jedem Fall so sein.

    1. Die Felddefinitionen sollten in beiden Tabellen die gleichen sein.

    2. Die Indizes richtig plaziert.

    Gruß
    Mike

    --
    Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."