MySQL & Indizes

Hallo,

kann mir bitte jamand erklären, wie Indizes bei Datenbanken funktionieren?

Wie ein Index grundsätzlich funktioniert ist mir dabei schon klar. Aber wie wirkt sich das jetzt aus wenn ich eine bestimmte Spalte in einer Tabelle indiziere.

Wird dann eine select Anfrage, bei der nach Informationen in dieser Spalte gesucht wird, schneller abgearbeitet weil anstatt der Spalte der Index durchsucht wird?

Warum wird dann nicht immer ein Index erstellt?

Und wo wird der Index überhaupt gespeichert?

Vielen Dank.

Gruß, Christian

Hallo Christian,

kann mir bitte jamand erklären, wie Indizes bei Datenbanken
funktionieren?

ich fürchte, das würde den Rahmen dieses Forums sprengen. Darüber kann man Bücher schreiben (oder lesen).

Wird dann eine select Anfrage, bei der nach Informationen in
dieser Spalte gesucht wird, schneller abgearbeitet weil
anstatt der Spalte der Index durchsucht wird?

Im allgemeinen ja, wenn der Index für die Suche brauchbar ist. Aber stell Dir mal eine Spalte mit 1000000 gleichen Werten vor… Im Übrigen entscheidet die Datenbank (der Optimizer), ob ein Index benutzt wird oder nicht.

Warum wird dann nicht immer ein Index erstellt?

Wozu? Auf eine Spalte, nach deren Inhalt möglicherweise nie gesucht wird? Indizes brauchen Speicherplatz und müssen synchron mit dem Tabelleninhalt aktualisiert werden, könne also Updates usw. auch „bremsen“.

Und wo wird der Index überhaupt gespeichert?

Keine Ahnung, kenne MySQL nicht, aber sicher in Datei(en) :wink:.

Gruß, muzel

Hi!

Im Übrigen entscheidet die Datenbank (der Optimizer),
ob ein Index benutzt wird oder nicht.

Außer ich „zwinge“ die DB (z.B. per Hint) dazu …

Grüße,
Tomh

Performance erhöhen?!?
Hallo Muzel,

danke für deine Antwort.

Wird dann eine select Anfrage, bei der nach Informationen in
dieser Spalte gesucht wird, schneller abgearbeitet weil
anstatt der Spalte der Index durchsucht wird?


Im allgemeinen ja, wenn der Index für die Suche brauchbar ist.
Aber stell Dir mal eine Spalte mit 1000000 gleichen Werten
vor… Im Übrigen entscheidet die Datenbank (der Optimizer),
ob ein Index benutzt wird oder nicht.


In einer Tabelle befinden sich über 500.000 Datensätze mit je 17 Attributen. Davon sind 4 vom Typ Int (incl. der id), der Rest ist TinyInt.

Die dazugehörige webbasierte Applikation wird extrem langsam, wenn ich Daten aus dieser Tabelle selectiere.

Ist es überhaupt möglich, die Performance durch Indizierung zu verbessern?

Hast du vielleicht noch andere Ideen, die mir da weiterhelfen könnten?

Recht herzlichen Dank, Christian

Hi,

Ist es überhaupt möglich, die Performance durch Indizierung zu
verbessern?

Natürlich, zu diesem Zweck existieren die ja.

Jeder Index den du erzeugst, muss allerdings beim Einfügen/Löschen/Aktualisieren durch die Datenbank mit gepflegt werden. Dies verlangsamt die Datenbank natürlich bei o.g. Aktionen.
Daher indiziert man i.d.R. nur die Felder auf die man in der WHERE-Bedingung auch abfragt.

Probier es doch einfach aus!

Gruss
Quaser