Optimierung von MySQL-Code
Luzi
- php
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.
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
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:
und ja: beschäftige Dich etwas mit explain, wie richtig vorgeschlagen wurde.
lg
Reiner