2010-06-14 11 views
5

Wenn Sie das Cachedwithin-Attribut in einer cfquery verwenden, wie speichert es die Abfrage in Arbeitsspeicher. Speichert es es nur durch den Namen, den Sie der Abfrage zuweisen? Wenn ich zum Beispiel auf meiner Indexseite eine Abfrage für eine Stunde zwischenspeichere und nenne, verwendet getPeople eine Abfrage mit demselben Namen auf einer anderen Seite (oder auf derselben Seite) mit den zwischengespeicherten Ergebnissen oder verwendet sie eine bessere Logik zu entscheiden, ob es sich um dieselbe Abfrage handelt?Verwenden von Cachedwithin Attifute in cfquery

Wenn die Abfrage eine Variable enthält, berücksichtigt der Cache den Wert der Variablen?

Antwort

5

Es ist nicht nur der Name - es ist die genaue Abfrage, die Sie ausführen.

<cfquery name="getPeople" cachedwithin=".5" ...> 
select name from employee order by name 
</cfquery> 

Wenn Sie diese gleiche Abfrage in Ihrer App aufrufen anderswo, werden Sie die Cache-Version, wenn es innerhalb eines halben Tages der ersten Abfrage ist. Aber diese werden die Datenbank für neue Daten treffen:

Und ja, es berücksichtigt eine Variable. Wenn Sie cfqueryparam verwenden - was Sie tun sollten - wird Ihre Datenbank den Abfrageplan zwischenspeichern, aber selbst unter Verwendung von cachedwithin wird jede Abfrage mit einem geänderten Parameter als von einer Query-Caching-Perspektive abweichend behandelt. Beachten Sie, dass dies bedeutet, wenn Sie cachedwithin für eine Abfrage verwenden, die viele Male mit unterschiedlichen Parametern ausgeführt wird, werden Sie den Abfrage-Cache mit Abfragen mit niedrigen Cache-Trefferraten überschwemmen.

+0

verwenden, was Sie sagen, ist, dass die 2. getPeople Ergebnismenge die 1. getPeople Ergebnismenge ersetzen würde? – Jason

+0

Cache-Abfrageplan? Ja wirklich? – Henry

+0

@Jason, laut dem Dokument, nein, da die SQL-Anweisung unterschiedlich ist, obwohl sie den gleichen Abfragenamen haben. – Henry