programmer: Optimieren von MYSQL-Code

Hallo zusammen

Ich habe einen Online-vokabeltrainer gebaut. habe ich die Vokabeln in Bücher, Lektionen und als kleinste Einheit Wörter gegliedert.
Bei der Übersicht der Bücher möchte ich die Anzahl Wörter anzeigen, die in dem entsprechenden Buch sind. Dabei habe ich diesen Mysql-Code:

  
 SELECT (  
  
SELECT count( * )  
FROM lektionen  
WHERE buchid = buecher.id  
) AS lektionen, (  
  
SELECT count( * )  
FROM woerter  
WHERE lektionenid  
IN (  
  
SELECT id  
FROM lektionen  
WHERE buchid = buecher.id  
)  
) AS woerter  
FROM buecher  
WHERE userid = '1'  

Mein Problem ist nun: Dieser code braucht zur Ausführung 5.9 Sekunden. Das ist viel zu lang. Ich weiss nur nicht, wie ich diesen Code optimieren kann. Oder geht das gar nicht?

Vielen Dank schon im Voraus

  1. Hallo,

    Mein Problem ist nun: Dieser code braucht zur Ausführung 5.9 Sekunden. Das ist viel zu lang. Ich weiss nur nicht, wie ich diesen Code optimieren kann.

    verwende Joins und setze sinnvolle Indexe. Prüfe, ob diese genutzt werden.

    Freundliche Grüße

    Vinzenz

  2. moin,

    Bei der Übersicht der Bücher möchte ich die Anzahl Wörter anzeigen, die in dem entsprechenden Buch sind. Dabei habe ich diesen Mysql-Code:

    korellierte unterabfragen sind schon der richtige weg, aber ein wenig anders geschrieben. wichtig ist aber, dass geeignete indexe vorhanden sind.

    SELECT (SELECT COUNT(*)
            FROM lektionen l
            INNER JOIN woerter w ON w.lektionenid = l.id
            WHERE l.buchid = b.id
           ) AnzahlWoerter
    FROM buecher b
    WHERE userid = '1'
    ;

    Ilja