tbee's page
   home  work  myself  mixed  guestbook  
   
      INHALT MySQL Indizes

Wer mir was gutes tun will kauft über diesen Link bei Amazon ein !

Indizes

INDEX Einträge sind extra abgelegte Informationen von Spaltenwerten über deren Wete (HASHs) die Datenbank schneller zugreifen kann.

Extrem vereinfacht kann man einen Index mit einem Daumenindex auf einem Buchschnitt vergleichen, der durchgeblättert wird.

Man unterscheidet Primär und Sekundär Indexen.

Es kann pro Tabelle nur einen Primär Index gegeben (Primärschlüssel) und beliebige Sekundärindexe.

In MySQl werden sogenannte B-Bäume (b-trees) eingesetzt. Diese kann man sich am besten als Ahnen Baum vorstellen an desen Knoten gewichtet auf Informationsblöcke verwiesen werden kann.
z.B.:

Diese Bilder und weitere Erläuterungen zu B-Trees und anderen Suchalgorithmen finden Sie bei von: Data Structures and Algorithms (engl.)
sowie B-Tree Definition (engl.)


Innerhalb des Indexes werden die Schlüssel und die entsprechenden Verweise zu den kompletten Datensatz gespeichert.
Bei Mysql ist ein Index einfach als weitere Datei im Filesystem zu finden!

Tips:

  • Sinnvoll ist es nur Spalten nach denen gesucht (WHERE CLAUSE) wird zu indexieren und nicht die die ausgegeben werden (SELECT )
  • Indexe arbeiten am effektivsten bei unique Feldern
  • Je kürzer ein Feld desto schneller der Index
  • Sobald Datenbank Funktionen verwendet werden kann der Index nicht mehr verwendet werden!
  • Je kürzer die Indexwerte desto schneller der Index (index lenght! CREATE INDEX name ON ausgeliehen (name(3)) )
  • zu viele Indexes kosten
    (beim INSERT)!

CREATE INDEX

CREATE [UNIQUE] INDEX index_name ON tbl_name (col_name[(length]),... )
Das CREATE INDEX Statement funktioniert erst seit der Version 3.22.

Normalerweise werden automatisch Indizes auf allen Tabellen angelegt, die mit dem CREATE TABLE Statement angelegt worden sind. CREATE INDEX erlaubt es nun, einen INDEX zu existierenden Tabellen hinzuzufügen.

Wenn eine Spaltenliste der Form (spalte1, spalte2,...) angegeben wird, wird ein mehrspaltiger INDEX erzeugt. Dies ist immer dann sinnvoll, wenn man einen eindeutigen Schlüssel (Primärschlüssel) nur aus der Kombination mehrerer Einträge erhält (Es macht keinen Sinn, einen INDEX allein auf den Nachnamen zu legen (Schmitz gibt´s zu viele)

Für CHAR und VARCHAR Spalten werden stets nur die ersten 10 Buchstaben indiziert. Beispiel:

MySQL> CREATE INDEX part_of_name ON customer (name(10));

Wird einem Select Statemant ein EXPLAIN vorangestellt erhält man von MySQL Informationen darüber wie dieser Select abgearbeitet wird. Unter anderem auch ob Indize verwendet werden. (Feld key)
So kann Explain einem unterstützen bei der Entscheidung an welcher Stelle noch ein Index fehlt.

 

Physikalisches Datenmodel Wie verknüpft man Tabellen

 

Druckerversion     [valid html 4.01]      [english]
style: blauer Stylegelber Styleroter Stylegruener StyleStandard Style
© 2001 by  tbee / Impressum last update at: 16.05. 2003 20:05:31
url: www.tbee.de/mysql/t3_indizes.php