STR_TO_DATE und Datumsvergleich --> Performance erhöhen ?

Skid

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine recht große Datenbank auf meinem PC laufen.
Bei einer Anfrage in der ich ein Datum vergleichen möchte, bspw. so :
Code:
(...) where STR_TO_DATE(date, '%Y-%m-%d') >= STR_TO_DATE(2005-01-01, '%Y-%m-%d')

Dauert die Anfrage um die 25 Sekunden.
Das ist zum arbeiten für mich viel zu lange.

Leider kann ich hier auch nicht mit LIMIT arbeiten, weil ich alle Datensätze auf einmal in einem anderen Progrmam benötige um diese zu analysieren.

Gibt es Möglichkeiten die Performance hier zu erhöhen ?
Indexierung der Spalte habe ich schon durchgeführt, weswegen ich wahrscheinlich bei "nur" 25 Sekunden lande.

Beste Grüße und Danke,
SkiD.
 
MySQL?
item: Jedes Datum in ein String formatieren scheint aufwendig.
item: im Zweiten solltes du den String 2005-01-0 in ANführungszeichen setzen, denn es ist ein String
item: DU kannst einfach mit DATE() arbeiten
item: ist date der Name des Feldes - unglücklicher Name
item: Warum erstellst du aus dem String ein Date, dieer String ist bereits ein Date
SQL:
WHERE DATE(`date`) >= '2005-01-01'
 
Zuletzt bearbeitet von einem Moderator:
MySQL?
item: Jedes Datum in ein String formatieren scheint aufwendig.
item: im Zweiten solltes du den String 2005-01-0 in ANführungszeichen setzen, denn es ist ein String
item: DU kannst einfach mit DATE() arbeiten
item: ist date der Name des Feldes - unglücklicher Name
item: Warum erstellst du aus dem String ein Date, dieer String ist bereits ein Date
SQL:
WHERE DATE(`date`) >= '2005-01-01'

Jep MySQL. Vergessen hinzu zu schreiben, sorry.
Okay ich habe es jetzt so umgebaut wie du geschrieben hast.
Folgendes musst ich wahrscheinlich noch dazu sagen:
Ich nutze für die ganze Geschichte noch die COUNT-Funktion. Scheinbar ist nicht unbedingt die Anfrage in Begrenzung auf ein Datum das Performance Problem, sondern die COUNT Funktion, wobei ich sagen muss, dass die Anfrage nun schon wesentlich schneller läuft *glücklich bin*.

So sieht sie derzeit aus:
Code:
SELECT rdate, rclass, count(rclass) as cnt  FROM default_table  WHERE DATE(rdate) >= '1900-01-01' AND DATE(rdate) < '1910-01-01' GROUP BY rdate, rclass;
 
Zuletzt bearbeitet von einem Moderator:
Zurück