# Kardinalität etc. @ indizes



## Sebigf (29. März 2006)

Hallo zusammen,

ich habe heute das erste mal mit den Indizes gearbeitet und bin ziemlich begeistert vom Ergebnis.

Kommt es mir nur so vor, oder macht es einen extremen Unterschied? 

Nun zu meine Frage...

- Was genau ist der Unterschied zwischen AUTO_INCREMENT, INDEX, UNIQUE und FULLTEXT?
- Welche Art von Kardinalität ist besser? Ein hoher oder ein niedriger Wert?
- Wofür die Größenangabe da? (ein Limit?)

Danke


----------



## ninguno (30. März 2006)

ja, ein passender index kann natürlich einen gewaltigen unterschied ausmachen.

was deine fragen anbelangt:

a) AUTO_INCREMENT, INDEX, UNIQUE und FULLTEXT sind begriffe die nur bedingt miteinander zu tun haben. aber sie sind alle in der mysql doku erklärt. was verstehst du denn daran nicht?
b) hohe Kardinalität ist normalerweise besser. das heisst es gibt mehr verschiedene schlüsselwerte und weniger rows mit dem gleichen schlüsselwert. dadurch kann eine bestimmte row normalerweise schneller gefunden werden.
c) welche grösse meinst du?


----------



## Sebigf (30. März 2006)

Danke für deine schnelle Antwort...

a) geklärt 

b) also ist Kardinalität = 100 besser als 5 ?! Was ist wenn es "keine" Kardinalität gibt. Kann ich dann den Index getrost löschen ?

c) siehe Bild (Anhang)

Noch etwas...

Es ist so, dass ich bei beinahe allen Feldern ein DATETIME mit dem jeweiligen Zeitpunkt der Erstellung des Beitrages mit speichere.

Macht es also, da es ja jeweils immer einen einzigartigen Wert gibt sinn, auf das DATETIME einen Index zu setzen ?

Danke


----------



## ManicMarble (31. März 2006)

Ein Index macht eigentlich nur dann Sinn, wenn...
a) sehr oft nach Datensätzen mit bestimmten Werten in diesen Feldern gesucht werden soll, entweder weil häufig ein SELECT über die Felder gemacht werden soll, oder weil oft Tabellen über diese Felder verknüpft (gejoint) werden.
Oder wenn...
b) über einen UNIQUE-Index gesteuert werden soll, dass es keine doppelten Einträge in einem Feld bzw. einer Feld-Kombination geben darf.
Oder wenn...
c) eine andere Besonderheit nur oder am effektivsten über einen Index gelöst werden kann, wie z.B. Volltextsuche, Fremdschlüssel, etc.
Oder wenn...
d) in ganz seltenen Spezial-Anwendungen (nicht bei Web-Anwendungen) über einen Index durch Datensätze einer Tabelle "geblättert" werden soll, wie dies in MySQL mit der HANDLER-Syntax gemacht wird ("HANDLER READ index NEXT" usw.)

Es macht absolut keinen Sinn, einen Index einzurichten, bloß weil Daten in einem Feld zufälligerweise eindeutig sind - auch wenn man dann bei diesem Index eine tolle Kardinalität erreicht. Wenn nie oder nur selten über ein solches Feld nach Datensätzen gesucht werden soll, dann ist ein solcher Index reine Verschwendung.

Grundsätzlich gilt: Je weniger Indexe es gibt, um so größer der Beschleunigungs-Effekt bei den Abfragen, die Indexe verwenden.
Analog: Würde man jedes Feld der Tabelle auch als Index anlegen, wäre der Effekt gleich null. Das wäre wie ein Buch, in dessen Inhaltsverzeichnis jedes im Buch vorkommende Wort mit Seitenangabe abgedruckt wäre. In einem solchen Inhaltsverzeichnis würde man genau so lange nach einer bestimmten Seite suchen wie im Buch selbst...

Hoffe, ein wenig zum Verständnis beigetragen zu haben,


----------



## Sebigf (31. März 2006)

Ja, klingt alles einleuchtend und auch gut erklärt 

Sicher macht es wenig Sinn, jedes Feld zu indexieren.
Ich sehe das dann so wie ein Waage-Prinzip, in dem sich beide Seiten gegeneinander auspendeln und es zu keinem Unterschied kommen kann.

Danke für das schnelle und gute Feedback


----------

