Es kann übrigens gut sein, daß Du durch die *Reihenfolge* der Joins bzw. der Ausdrücke in der Where-Klausel die Geschwindigkeit massiv beeinflussen kannst. (Ein wirklich guter Optimizer sollte das eigentlich selbst richtig machen, aber wo gibt es den schon?) Der Trick ist, daß Du die stark projezierenden JOINs zuerst machst, um die Treffermenge insgesamt einzuschränken - und was bei Dir wie stark projeziert, darüber hat auch ein guter Optimizer (Kommando ANALYZE TABLE in Oracle) bestenfalls statistische Informationen.
Ich habe mal in Oracle zwei Tabellen, die ich fast nur mit einem gemeinsamen JOIN über Primärschlüsselattribute anspreche, in einen CLUSTER gelegt, d. h. die Datensätze beider Tabellen werden so physikalisch gespeichert, daß sie in einem gemeinsamen Segment über den JOIN-Schlüssel adressiert werden können (das minimiert die Kopfbewegungen der Platte usw.). Oracle kann so etwas halt ... aber mySQL ... ?
Jepp. Bei Oracle kann man damit unheimlich viel herausholen. Auch der alte Trick bei Oracle, die Reihenfolge der Tabellen in der From Clause funktioniert immer noch (die kleinste Tabelle muß zuletzt angegeben sein. Oder war das jetzt zuerst ? *schwitz, vergeßlich*) Jede gute Datenbank kennt Regeln zur Optimierung. Dazu ist dann allerdings schon wieder Verständnis für die Speicherungs - und Zugriffsmethoden der Datenbank nötig.
Oft hilft es auch Tabellen in ein Segment zu legen, oder bewußt zu trennen, Locking Mechanismen (also Sperren gegen gleichzeitige Zugriffe) bedeuten Verwaltungsoverhead. Tablespacelocking kann zwar in Multiuserumgebungen tödlich sein, es kann aber auch gegenüber Page- oder gar Row-Locking einen ordentlichen Geschwindigkeitsschub bringen. Regelmäßige Reorganisation, angepaßte Freespaceangaben (freier Platz aud jeder Tabellenseite für änderungen und neue Sätze) usw. tun ein übriges. Man kann eine Wissenschaft daraus machen. Das geht hier aber denke ich zu weit. Zumal dies dann auch andere Anwendungen betrifft, die ebenfalls auf die Tabellen zugreifen. Wer so tief in die Materie einsteigt, sollte sich dann besser gleich eine 'gescheite' (nicht hauen bitte) Datenbank zulegen. ;-)
Viele Gruesse
Kess