Einzelnen Beitrag anzeigen

Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

DB-Design: Index richtig verwenden

  Alt 29. Apr 2006, 07:56
Datenbank: Mysql • Version: 5 • Zugriff über: php (tut aber eigentlich nichts zur Sache)
Hi @ll,

ich habe mir gerade ein Script geschrieben, welches eine 1,3 MB Tabelle durchgeht und in einer Schleife ca. 20.000 querys darauf ausfuehrt. Nur Select-Abfragen mit einem WHERE auf eine INT-Spalte.
Das Script hat 90 Sekunden gebraucht und damit einen schnitt von 46 Querys/Sekunde geschafft.
Nachdem ich das Skript ein paar mal laufen gelassen habe, kam ich auf die Idee, dass das doch ein wunderbares Beispiel dafuer ist um mal zu testen, welche Auswirkungen ein Index auf die angesprochene INT-Spalte sich auswirkt.
Also eben phpmyadmin auf, angelegt und mein Script mal wieder ausgefuehrt...
Ich habe erwartet, dass mein Script vielleicht so 10% schneller ist. Bei 50% haette ich gestaunt. 10mal so schnell haette ich nicht fuer moeglich gehalten.
Als ich dann meinen Skript startete und gleichzeitig mich aus meinem Stuhl erhob um mein Muesli wieder aufzufuellen konnte ich mich direkt wieder auf die Sitzflaeche fallen lassen, denn mein Script war fertig. Geamtdauer: 0.45 Sekunden. Querys pro Sekunde: 9108.
Wow. Das isty eine Geschwindigkeitserhoehung um den Faktor 180! *dumm aus der Waesche guck* EINHUNDERTACHTZIG!
Ich habe sogar den index wieder entfernt und mein script nochmal laufen lassen um sowas wie einen query-cache auszuschliessen. Dann hatte ich wieder nur noch 50querys/Sekunde. 4 querys mehr pro Sekunde, als bei meinem ersten Versuch, aber bedeutend langsamer als bei meinem Versuch mit index.

Gut, Ende der Story, wie ich darauf komme und start mit der Frage:
Ist es sinnvoll auf jede spalte, die in irgendeinem WHERE oder ORDER BY oder GROUP BY vorkommt ein index zu legen? Was haelt mich daran zurueck einfach ueberall einen Index drauf zu legen? Haben indices irgendwelche negativen effekte (viel HDD-speicher oder so..)
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat