Mailinglisten-Archive |
Hallo Michael, > Wenn kodex 2 häufiger ist würde ich den ins where nehmen, wenn "5 oder 6" > häufiger ist, dann eben die. (sollte eigentlich auch der optimizer > automatisch machen aber nun ja...) Das Problem dabei ist das diese Auswahl was mit wem übereinstimmen soll von willkürlichen Benutzereingaben abhängt und somit im Vorfeld aufwendige Optimierungen gemacht werden müssten. Gut man könnte sich eine Häufigkeitstabelle machen und danach dann die Query aufbauen. Sowas hab ich mal bei Interbase und deren blöden Optimizer gebaucht. Wenn parallel aber Daten reinlaufen fragt sich ob sich der Aufwand der Datenpflege lohnt. Ist aber ne weitere Optimierungsmöglichkeit. > Ich greife hier mal Andreas' query auf und ändere sie: > > select distinct t1.id > from tabelle t1 > inner join tabelle t2 on t2.id=t1.id and (t2.kodex=5 or t2.kodex=6) > where t1.kodex=2 Ich hatte das absichtlich als 2 inner joins geschrieben da wie oben schon gesagt die Anzahl der joins unbestimmt ist und somit der aufwand der SQL Generierung so viel auswendiger ist. Aber klar ist das man es so verbessern kann nur gleich so geschrieben hätte es wohl keiner verstanden :-) Uns self-joins sind garnicht bäh ... die sind lustig :-) Btw. was hier noch passieren kann: Die Anzahl joinbarer Tabellen ist limitiert (Compilezeit soweit ich weiss). Normal sollten 31 oder 32 Tabellen in einem Join gehen. Da also aufpassen das der Benutzer nicht zu viel Suchoptionen hat. Gruß, Andreas -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive