(PHP) Allgemeine frage zu MySQL Datenbanken und Indexe
Bastler
- datenbank
Hallo,
Ich hab INZWISCHEN ne sehr große datenbank deren Performace zu schwinden scheint.
damals habe ich die dtanebank noch so programmiert dass ich einen select all auf die datenbank mache und die suchkriterien per PHP abarbeite.
jetzt weiss ich das dass keinen sinn macht und ärgere mich das ich wahrscheinlich nun das ganze system umbauen darf damit die Performance wieder wie am anfang ist.
jetzt meine frage: bringen indexe nur im zusammenhang mit der richtigen abfrage was oder bringen sie allgemein bessere performance.
Beispiel 1:
Select * From $table -> alles weitere macht das PHP script
Beispiel 2:
Select * From $table where dies und das
wenn ich nun auf die wichtigsten spalten einen index lege dann bleibt doch die suchdauer im beispiel 1 gleich und im beispiel 2 verbessert sie sich, ist das richtig?
MfG Bastler
Hi,
damals habe ich die dtanebank noch so programmiert dass ich einen select all auf die datenbank mache und die suchkriterien per PHP abarbeite.
gerade das sind die Aufgaben von SQL.
jetzt meine frage: bringen indexe nur im zusammenhang mit der richtigen abfrage was
Ja. Sie enthalten keine Magie.
Select *
SELECT * ist außer für Testzwecke zu vermeiden. Gib genau die Spalten an, die Du selektieren möchtest.
From $table -> alles weitere macht das PHP script
Keine Einschränkung der Datenmenge => FULL TABLE SCAN (und Übertragung *aller* Daten).
Select [Spalten] From $table where dies und das
Günstiger Index auf dies, das ist sinnvoll.
wenn ich nun auf die wichtigsten spalten einen index lege
Nicht die wichtigsten. Die, die bei der Abfrage am schnellsten am meisten einschränken.
Cheatah
hi,
jetzt meine frage: bringen indexe nur im zusammenhang mit der richtigen abfrage was oder bringen sie allgemein bessere performance.
optimal ist es, wenn du genau weißt, nach was( welche felder oder tabellen) am meisten gesucht wird, dort legst du die indexe hin. aber denk dran, wenn du viele änderungen,delete ,etc vorgänge hast, dann werden diese durch indexwerte verlangsamt, da die indexe ja dann neu geordnet werden müssen. wenn du aber immer wieder in der gleichen spalte suchst, dann laß sie weg, da durch zuviele festplattenzugriffe der vorteil der indexierung leicht verloren geht.
ein index funktioniert auch auf keinen fall mit textfeldern und NULL werte zulassende felder
Beispiel 1:
Select * From $table -> alles weitere macht das PHP script
müll
Beispiel 2:
Select * From $table where dies und das
so schon eher, bei OR abfragen muss auch der gesamte index durchlaufen werden, also indexvorteil ist verloren
wenn ich nun auf die wichtigsten spalten einen index lege dann bleibt doch die suchdauer im beispiel 1 gleich und im beispiel 2 verbessert sie sich, ist das richtig?
naja, so ähnlich, gibts viel zu bachten, siehe oben
ciao
ronny