phpbar.de logo

Mailinglisten-Archive

AW: wie kann das schneller werden...

AW: wie kann das schneller werden...

Andreas Müller mysql at universalware.de
Fre Mai 16 17:02:22 CEST 2003


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