Index

Hi Leute,

ich bin gerade dabei eine mysql Datenbank zu entwickeln und bin da während meiner Optimierung auf „indexe“ gestossen. Meine Fragen:

  1. Welche Werte sollten einen Index erhalten ??
  2. Wie wirkt sich das auf die Grösse und Performance meiner Datenbank aus

Beispiel eine n:n Beziehung zwischen den folgenden Tabellen

Tabelle 1:
tb1_id
wert1

Tabelle 2:
tb2_id
wert2

Tabelle 3:
tb3_id
tb2_id
tb1_id

Welchen Werten muss ich einen Index zuordnen und wie lautet die schnellste Abfrage zu Tabelle 1, wenn ich alle wert2 Einträge haben möchte die mit Tabelle 1 über Tabelle 3 miteinander verknüpft sind (eine lösung ist select wert2, wert1 from tabelle2, tabelle1 where tabelle1.tb1_id = tabelle3.tb1_id and tabelle3.tb2_id = tabelle2.tb2_id)

Danke für die Mühe und Lösungsvorschläge.

Gruss Martin

  1. Welche Werte sollten einen Index erhalten ??

Die Werte auf die du ein Select ausführst. Wenn du z.B. ein Feld Name hast, dann solltest du da drauf einen Index machen. Achtung: Indexe sind glaub ich nur auf Felder mit fixer Länge möglich, also nicht auf TEXT oder BLOB oder so.

  1. Wie wirkt sich das auf die Grösse und Performance meiner
    Datenbank aus

Auf die Größe negativ, aber das fällt nicht ins Gewicht. Auf die Performance positiv, weil er bei einer Abfrage auf das Feld mit speziellen Algorithmen (z.b. binärer Suche) wesentlich schneller ans Ziel kommt, als wenn Mysql gar nicht weiss wo der Eintrag ist und sozusagen alle Datensätze durchsuchen muss.

MfG Bruno

  1. Welche Werte sollten einen Index erhalten ??

Die Werte auf die du ein Select ausführst. Wenn du z.B. ein
Feld Name hast, dann solltest du da drauf einen Index machen.

Genauer: Die Werte, die in Deiner WHERE-Klausel auftauchen. Der Index ist eine Hilfe, um die Suche zu beschleunigen; suchst Du nach Farbemn, indiziere die Farben, suchst Du nach Azutomarken, dann eben die Automarke.

  1. Wie wirkt sich das auf die Grösse und Performance meiner
    Datenbank aus

Auf
die Performance positiv, weil er bei einer Abfrage auf das
Feld mit speziellen Algorithmen (z.b. binärer Suche)
wesentlich schneller ans Ziel kommt, als wenn Mysql gar nicht
weiss wo der Eintrag ist und sozusagen alle Datensätze
durchsuchen muss.

Das ist auch nur relativ. Schreibzugriffe werden langsamer, da nach jeder Aktualisierung der Index mit aktualisiert werden muß. Hier muß man überlegen, was mehr bringt: ist es eine Tabelle, bei der viel geschrieben wird, aber wenig gesucht (z.B. Bewegungsdaten), so ist der Performanceverlust im regelmäßig voorkommenden Schreibfall schlimmer als der Performancegewinn im selteneren Suchfall.

Gruß

J.