Der folgende Beitrag wurde am 04. 11. 2004, 12:10 Uhr von P. Müller veröffentlicht.
Hallo Leute,
ich habe ein Problem bei einem Datumstype date.
Wenn ich einen Vergleich durchführe wie:
....where datum = '2004-01-10'.... nutzt mysql den index, den ich auf das Feld gelegt habe. (Kann man ja mit explain anzeigen lassen.)
Wenn ich aber folgendes mache:
....where datum >= '2004-01-10'..... nutzt mysql den Index nicht.
Kann mir jemand sagen, ob es einen besseren Vergleich gibt?
Ich muß in Sache etwas mehr Geschwindigkeit bringen!
Vielen Dank!
Peter
Der folgende Beitrag wurde am 04. 11. 2004, 13:26 Uhr von Philipp Hasenfratz veröffentlicht.
Halihallo P.
> Wenn ich aber folgendes mache:
> ....where datum >= '2004-01-10'..... nutzt mysql den Index nicht.
Nicht zwingend, ja. Aber MySQL wird den Index benutzen, sobald es
Sinn macht.
> Kann mir jemand sagen, ob es einen besseren Vergleich gibt?
Nein.
> Ich muß in Sache etwas mehr Geschwindigkeit bringen!
Das musst nicht du, das ist die Aufgabe der Datenbank [1]! Diese
entscheided wie eine Anfrage am schnellsten ausgeführt werden kann
und in deinem Beispiel muss sie einen Grund haben um den Index nicht
zu verwenden. Mögliche Ursachen die die Verwendung eines Index
unterbinden findest du in der Doku. Beispiele sind: Index, indem
der gesuchte Indexwert mehr als 30% der gesamten Tupel (Datensätze)
betrifft, zu kleine Tabelle... etc. Wenn bei dir z.B. 30% Datensätze
nach 2004-01-10 sind, wird MySQL deinen Index nicht benutzen.
Fazit: MySQL benutzt deinen Index, wenn es Sinn macht. Überlasse die
Entscheidung der Datenbank, denn sie weiss besser wann ein Index Sinn
macht (bzw. man kann es auch steuern, wenn sie sich mal irren
sollte).
[1] du gibst ihr lediglich Eckdaten/-information wie z.B. welche
Attribute als INDEX oder UNIQUE INDEX verwendet werden dürfen etc.
MySQL entscheided aber selber, ob die Verwendung des Index Sinn macht
oder nicht (das gibt es nämlich auch!).
Viele Grüsse
Philipp
Der folgende Beitrag wurde am 04. 11. 2004, 13:59 Uhr von Ilja veröffentlicht.
yo,
> Das musst nicht du, das ist die Aufgabe der Datenbank [1]! Diese
> entscheided wie eine Anfrage am schnellsten ausgeführt werden kann
> und in deinem Beispiel muss sie einen Grund haben um den Index nicht
> zu verwenden.
dbms sind auch nur "menschen", bzw. sind von menschenhand gemacht worden und irren sich einfach mal. oracle kennt genau aus diesen grund sogenannte hints, die den otpimierer zu bestimmten entscheidungen "überreden" (nicht zwingen). insofern könnte ich mir vorstellen, dass es sowas auch unter mysql gibt, bin mir da aber sehr unsicher.
Ilja
Der folgende Beitrag wurde am 04. 11. 2004, 16:42 Uhr von Philipp Hasenfratz veröffentlicht.
Halihallo Ilja
> > Das musst nicht du, das ist die Aufgabe der Datenbank [1]! Diese
> > entscheided wie eine Anfrage am schnellsten ausgeführt werden kann
> > und in deinem Beispiel muss sie einen Grund haben um den Index nicht
> > zu verwenden.
>
> dbms sind auch nur "menschen", bzw. sind von menschenhand gemacht worden und irren sich einfach mal. oracle kennt genau aus diesen grund sogenannte hints, die den otpimierer zu bestimmten entscheidungen "überreden" (nicht zwingen). insofern könnte ich mir vorstellen, dass es sowas auch unter mysql gibt, bin mir da aber sehr unsicher.
Aber bestimmt, das ist natürlich alles richtig. Darauf angespielt
habe ich auch über
<cite>(bzw. man kann es auch steuern, wenn sie sich mal irren
sollte).</cite>. Nun, was heisst hier alles richtig??? - DBMS sind
keine Menschen und sie irren sich nie (Programme und Computer irren
nicht, nur deren Erschaffer)! :-)
Hints zur Optimierung gibt es auch bei MySQL. z.B. unter
MySQL: Join
Viele Grüsse
Philipp
© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4