Luzi: Optimierung von MySQL-Code

Hallo zusammen

Ich habe jetzt viel über Join-Anweisungen gelesen. Jedoch habe ich es nicht fertig gebracht, dieses MYsql-Statement zu optimieren:

SELECT * FROM woerter WHERE id = '1226160' OR ( original = '1226160' AND sprache1 = 'asdf' AND sprache2 = 'asdfaa' AND ( SELECT refresh FROM buecher WHERE id = ( SELECT buchid FROM lektionen WHERE id = lektionenid )) = '1')

Das System ist so aufgebaut, dass es eine table "buecher" gibt. Als zweites ein table "lektionen". Es verweisen meistens mehrere lektionen auf ein Buch (per lektionenid). Und dann noch "woerter". Es verweisen auch hier meistens mehrere Wörter auf eine Lektion (per lektionenid).
Das Ziel der Abfrage ist es, alle Wörter, die entweder die gleiche ID oder (die gleiche "Original-ID" (Feld: "original"), eine gegebene "sprache1", eine gegebene "sprache2" und das Feld "refresh", des Buches = '1' ist).

Die Tabelle Wörter hat etwa 700'000 Einträge, Lektionen etwa 20'000 und Bücher etwa 1200.
Das Ausführen dauert zur Zeit etwa 1.5 Sekunden. Kann man da (mit Joins) irgendetwas vereinfachen.

Ich hoffe ihr könnte mir weiterhelfen.

  1. Hi,

    Ich habe jetzt viel über Join-Anweisungen gelesen. Jedoch habe ich es nicht fertig gebracht, dieses MYsql-Statement zu optimieren:

    Dann nutze als allererstes EXPLAIN.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. Hallo zusammen

    Ich habe jetzt viel über Join-Anweisungen gelesen. Jedoch habe ich es nicht fertig gebracht, dieses MYsql-Statement zu optimieren:

    SELECT * FROM woerter WHERE id = '1226160' OR ( original = '1226160' AND sprache1 = 'asdf' AND sprache2 = 'asdfaa' AND ( SELECT refresh FROM buecher WHERE id = ( SELECT buchid FROM lektionen WHERE id = lektionenid )) = '1')

    Ich nutze auch manchmal subselects, weil es vieles einfach macht.
    Aber hier sind 2 völlig unabhängige Dinge wild durcheinandergewürfelt, oder?
    Ich glaube auch nicht, dass das heraus kommt, was Dir vorschwebt!
    Und: Mich wundert, dass es "nur" 1.5 Sekunden dauert...

    Ich würde folgendes vorschlagen:

    • richtiges Thema (hat nix mit Php zu tun)
    • kurze Struktur Deiner Tabellen und Sinn bzw. Abhängigkeiten
    • was soll Deine Query auswerfen?

    und ja: beschäftige Dich etwas mit explain, wie richtig vorgeschlagen wurde.

    lg
    Reiner