Ce n'est pas seulement le nom, c'est la requête exacte que vous exécutez.
<cfquery name="getPeople" cachedwithin=".5" ...>
select name from employee order by name
</cfquery>
Si vous invoquez cette même requête nulle part ailleurs dans votre application, vous obtiendrez la version en cache si elle est dans un demi-jour de la première requête. Mais ceux-ci frappera la base de données pour les données fraîches:
<!--- Different name, same SQL: A new cached query --->
<cfquery name="getEmployees" cachedwithin=".5" ...>
select name from employee order by name
</cfquery>
<!--- Different SQL, same name: Redefining the cached query --->
<!--- Note: As pointed out in comments, it's not really overwriting the old query
of the same name, but making a new one in the cache. The first one by the
same name is still in the cache, waiting for eviction. --->
<cfquery name="getPeople" cachedwithin=".5" ...>
select name from employee order by name desc
</cfquery>
Et oui, il ne prend une variable en compte. Si vous utilisez cfqueryparam
- ce que vous devriez faire - votre base de données mettra en cache le plan de requête , mais même en utilisant cachedwithin
, chaque requête avec un paramètre modifié sera traitée différemment d'une perspective de mise en cache de requête. Notez que cela signifie que si vous utilisez cachedwithin
sur une requête qui s'exécute plusieurs fois avec des paramètres différents, vous inonderez votre cache de requêtes avec des requêtes qui ont des taux de réussite de cache bas.
alors ce que vous dites est que le jeu de résultats 2nd getPeople remplacerait le premier jeu de résultats getPeople? – Jason
plan de requête de cache? vraiment? – Henry
@Jason, selon le doc, non, puisque l'instruction SQL est différente bien qu'ils aient le même nom de requête. – Henry