Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

MySQL Query-Cache vs. NOW() und CURDATE()

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 29.01.2010, 19:42

Hallo zusammen,

ich stehe hier gerade vor einem Problem (seltsamen Zustand) den ich mir nicht erklären kann.

In einer Query wird das aktuelle Datum berücksichtigt und anhand dessen die Datensätze ausgewählt.

So, anfangs hatte ich dazu immer NOW(), doch Minuten und Sekunden brauche ich gar nicht. Also verwende ich aktuell CURDATE() um die Daten zu vergleichen.

Dachte eigentlich auch, dass diese Queries so cachebar wären, aber dem ist wohl nicht so.

Die komplette Query braucht mit NOW() oder CURDATE 0.3 Sek. Selbige Query in der Folge dauert genauso lange und kommt in dem Fall nicht aus dem QCache. Dachte ich aber, da die Query sich ja nicht ändert.

Nehme ich aber anstelle von NOW oder CURDATE einen festen Wert wie '2010-01-28', dann dauert die Query immer noch 0.3 Sek, aber nur beim ersten Aufruf. Alle weiteren kommen aus dem Cache.

So, gibt es dafür eine Erklärung?

Ich dachte bisher wirklich, dass Queries mit mysql-Funktionen als "statisch" betrachtet werden, eben nicht wie eine mit PHP time() die sich bei jedem Aufruf ändert.

Nachtrag: Hm, da hätte ich wohl vorher mal in die Doku sehen sollen. Bei Verwendung einer MySQL-Funktion wird der Cache nicht benutzt. Das ist ja unfug. Also doch per PHP vorher das ganze erledigen und dann Abfragen.