Langsames LEFT JOIN ....

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Langsames LEFT JOIN ....

    Hallo,

    ich habe 2-Tabellen. In der einen stehen Autoren und in der anderen Bücher. Zu jedem Buch kann es genau einen Autor geben. Jetzt ist es aber so, dass nicht jeder Autor überhaupt ein Buch in der Bücher-Tabelle hat und ich will eine Liste mit bestimmten Autoren (Suche) und möchte wissen, ob diese Autoren ein oder mehrere Bücher bereits veröffentlicht haben (Anzahl egal).
    Das ist alles kein Problem, die Abfrage müsste ungefähr so lauten:

    SELECT
    autor_name,
    if(COUNT(buecher),1,0) AS buecher_vorhanden
    FROM
    autoren
    LEFT JOIN buecher ON autoren.autor_ID = buecher.autor_ID
    WHERE
    autor_name LIKE '%suchbegriff%'
    GROUP BY
    autor_ID

    Mein Problem ist nun, dass das sehr langsam ist. In meinem Fall (autoren-Tabelle: ca. 2500 Datensätze, Bücher-Tabelle: ca. 5000 Datensätze) dauert diese Abfrage (bei einem Suchbegriff, der 40 mal gefunden wird) > 2.8 Sekunden.

    Wenn ich die gleiche Abfrage anstatt mit "LEFT JOIN" mit einer normalen "WHERE autoren.autor_ID = buecher.autor_ID" mache, bekomm ich zwar nur die Ergebnisse der Autoren, die wirklich schon ein Buch geschrieben haben, aber das dauert dann nur 0.09 Sekunden. Kann das sein, dass das so viel langsamer mit dem LEFT JOIN ist ?

    Die 3.Variante, die ich ausgetestet habe, ist, dass ich mir erst alle Autoren raussuche und dann zu jedem einzelnen ne Abfrage mache, ob der schon Bücher geschrieben hat. Diese Variante dauert dann ca. 1.3 Sekunden, was ja immernoch ca. doppelt so schnell ist, wie die "LEFT JOIN"-Variante.

    Mach ich was falsch oder muss ich mit dem Problem leben ??

    bye Roogla

  • #2
    Hat sich erledigt
    Lösung: buecher.autor_ID war kein Index !

    bye roogla

    Kommentar

    Lädt...
    X