Thema: MySQL-Index

Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: MySQL-Index

  Alt 24. Mär 2013, 17:12
Meine Empfehlung wäre je einen Index "threadID" und "time".
Aber so war es ja, und da wurde der time-Index nicht benutzt! Ich will wissen, wieso.
Ob ein Index benutzt wird oder nicht hängt davon ab wie das DBMS die Kosten für bestimmte Operationen einschätzt.
Mal angenommen die Einschränkung WHERE threadID=13 liefert 500 Datensätze und über die Einschränkung "isDisabled = 0" werden es 350 Datensätze.
Sollte es einen separaten Index für "time" geben und es gibt insgesamt 50000 Datensätze, dann ist es wahrscheinlich günstiger die 350 Datensätze einfach zu sortieren als über den gesamten Index von "time" zu gehen und in der Reihenfolge die Daten auszugeben.

Ganz grob gesagt sind weniger als 1000 Datensätze im Speicher schneller sortiert als sie mit Hilfe eine Index in die richtige Reihenfolge gebracht würden.
Nicht immer trifft das DBMS die richtige Entscheidung, denn es kommt auch darauf an wie die Daten verteilt sind.

In deinem 2. Fall ist der Index so angelegt, dass über die ersten beiden Felder gefiltert wird (WHERE threadID = 15 AND isDisabled = 0) und danach die Daten genau in der Reihenfolge des Index vorliegen.
Hier entscheidet MySQL richtig und verwendet den Index auch zur Sortierung.

Im 1. Fall ist es günstiger die Daten nur über den Index "threadID" zu ziehen, dann alles auszufiltern was nicht der Bedingung "isDisabled = 0" gehorcht und dann die Daten im Speicher nach "time" zu sortieren.
Anscheinend ist die Datenmenge zu gering, als das es einen Vorteil brächte den Index "time" zu benützen.
  Mit Zitat antworten Zitat