Daniela Koller: MySQL - Indexes-Problem: Ich verstehs nicht.

Beitrag lesen

Hi Aqua

Beim CREATE Syntax einer MySQL-Tabelle sieht man sehr oft
folgende Zeile:

UNIQUE KEY id (id),

Das hat irgendwas mit "indexes" zu tun,
ich hab aber noch nicht so ganz gerafft was es mit diesen
indexes nur auf sich hat.

Gar nichts, das Ganze erzeugt nur deswegen einen Index, weil es nur so performant implementiert werden kann. Stell dir mal vor, bei jedem Insert müsste die ganze Tabelle durchgescant werden, um zu sehen ob die neuen Daten das Unique-Constraint verletzen. Und weil der Index jetzt sowieso schon da ist, kann er eben auch so verwendet werden.

Da kann ich irgendwie ein Feld oder mehrere UNIQUE machen
aber dann kann man ja doch wieder gleiche werte einfügen
wenn es mehrere sind oder so und ...  =(
Das ist kompliziert!

Nein, es ist ganz einfach, die Kombination aus allen Werten die zum Unique-Constraint gehören, muss Unique sein. Also zb
Constraint über Feld1 und Feld2, dann sind die Datensätze
Feld1: 1, Feld2: 2 und Feld1: 2, Feld2: 2 ok, aber ein weiterer Datensatz mit Feld1: 1, Feld2: 2 nicht.

Bitte erklaert mir das wie ich auf diese Art nen Index anlege
mit einem Praxisbeispiel was einem der Index hilfst (mit 5 Werten)

Gar nicht, wenn du einen Index anlegen willst, dann mach dass, wenn du ein Unique-Constraint anlegen willst, dann leg so eins an.

http://www.mysql.com/doc/en/CREATE_INDEX.html
http://www.mysql.com/doc/en/CREATE_TABLE.html <- Constraints sind da auch erklärt.

PS.:    UNIQUE KEY id (id),

Ich _glaube_ (echt nur glauben!)
        dass ich es ohne dem Wort KEY auch schonmal sah...

Ja

also im Stil von UNIQUE id (id),

Was hat das dann anderes zu bedeuten?

Das eine ist korrekt, das andere ist MySQL Standardinkompatibles gewurstel. Da gehört kein Key hin.
Siehe auch http://www.mysql.com/doc/en/CREATE_TABLE.html. Genauer:

KEY is normally a synonym for INDEX. From version 4.1, the key attribute PRIMARY KEY may also be specified as just KEY. This was implemented for compatibility with other databases.

Das gilt für MySQL, ansonsten heissen Indizes auch Indizes.

Gruß Daniela