MySql: comparision of date
P. Müller
- datenbank
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
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
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
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