paschef: MySQL: Performaceproblem

Beitrag lesen

Hallo

Du könntest einen index auf die Spalte Sp1 legen. Dann sollte die Suche bedeutend schneller gehen.
Zu meiner Schande muss ich gestehe, dass ich das mit dem index noch nicht so richtig kapiert habe. Könntest du mir etwas auf die Sprünge helfen?

Also ungefähr so:
Wenn Du einer Spalte einen Index zuweist, dann erstellt und verwaltet MySQL eine extra Tabelle, in der bestimmte Informationen zu Deiner Spalte stehen. Z.B. steht da dann drinnen, daß der Wert 'bbbbb' in der Spalte Sp1 in den Zeilen 1234 bis 1238 vorkommt. Die Nummerierung gibt es in Wirklichkeit so nicht, aber das ist hier nicht so wichtig...
Wenn Du nun per SELECT nach einem Wert in Sp1 suchst, dann schaut MySQL zuerst in der index-Tabelle nach, stellt dort fest, daß es nicht alle 1.4 Mio Datensätze zu durchsuchen braucht, und geht ruckzuck zu den betreffenden Zeilen 1234 bis 1238.

Du kannst für jede Spalte einen eigenen Index anlegen. Wenn Du oft Werte in zwei oder mehr Spalten suchst, dann kannst Du auch für mehrere Spalten einen Index anlegen.

Allerdings kostet die Verwaltung auch Resourcen, es macht also keinen Sinn, für jede Kombination von Spalten einen eigenen Index zu bilden. Aber falls Du vorhersehen kannst, daß Du überwiegend Lese-Zugriffe auf bestimmte Spalten hast, dann ist ein Index wunderbar. Auch JOINs laufen beträchtlich schneller.

Wenn Du PHPMyAdmin hernimmst: Da kann man das sehr bequem (unterhalb der Tabellenansicht) anlegen.

Ausführliches auch hier:
<a href="http://www.mysql.com/doc/O/p/Optimising_Database_Structure.html">http://www.mysql.com/doc/O/p/Optimising_Database_Structure.html</a>

Im Ergebnis soll noch _mehrfach_ gesucht werden, also:
SELECT Sp1,Sp2,Sp3 FROM tabelle WHERE Sp3 = 'irgendwas'
SELECT Sp1,Sp2,Sp3 FROM tabelle WHERE Sp3 = 'irgendwasanderes'
SELECT Sp1,Sp2,Sp3 FROM tabelle WHERE Sp3 = 'nochwasanderes'

Dann hätte ich die langdauerte Abfrage eben immer wieder.

Mit 'nem Index sollte das kein Problem mehr sein.

Gruß,
paschef