Mailinglisten-Archive |
Hallo Ulrich, > -----Original Message----- > From: Ulrich Seppi [mailto:seppi at idealnet.com] > Beispiel: > - suche alle ID welche (kodex=5 oder kodex=6) und kodex=2 haben > Explain vor das select gestellt und man erhält ein paar infos, wie mysql vorgeht. Andreas hat ja schon einen super Vorschlag gemacht. Es stellt sich die Frage nach der "Kardinalität" also Werteverteilung. 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...) Folgende zwei Indizes sollten für diese "Relation" definiert sein: 1.) Index auf die Kombination ID,Kodex (ist wahrscheinlich schon (hoffentlich) der Primärschlüssel, Reihenfolge wichtig). 2.) Index auf Kodex (alleine) 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 ;-) Zum Wochenende hin sollte man folgende Warnung bedenken: Self-Joins (wie hier gezeigt) sind grundsätzlich unanständig (also Bäh) und sollen angeblich auch Blind machen. Bevor man also einen "Error 42: Tennis-Arm detected." erhält sollte man hierfür je nach Vorliebe lieber MyGirlfriend, MyBoyfriend bzw. MyWife verwenden. ;-) Grüße, Michael Donning -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive