2009-08-26 4 views
0

J'ai utilisé nhibernate pour mon implémentation. Il y a beaucoup de récupération de base de données impliquée et afin de réduire le temps de traitement, j'ai activé la mise en cache des requêtes et chargé les données de la table complète sur l'application au démarrage. Puis linq contre. La mise en cache de niveau secondaire et la mise en cache de requête sont activées. Cela fonctionne mais quand je fais le traitement plusieurs fois, dans mes fichiers journaux, je peux voir les requêtes sur les tables mises en cache avec sa clé primaire et cela est fait pour chacune des lignes de cette table. Je pense que cela se passe parce que ma requête est contre la table complète sans aucune condition. Je ne sais pas est-ce à cause de tout problème dans mon code ou tout autre problème. Quand je le fais avec moins d'entités, cela semble fonctionner. Est-ce que quelqu'un sait quelque chose à propos de ce problème? La mise en cache des requêtes met-elle uniquement en cache les clés primaires des lignes?L'entité est-elle mise en cache dans Query Caching?

Répondre

2

La mise en cache des requêtes ne met en cache que la clé primaire des résultats de la requête. De l'query cache documentation:

Notez que le cache de requête ne cache l'état de toutes les entités du jeu de résultats ; il met en cache uniquement les valeurs d'identifiant et les résultats de type valeur. Donc le cache de requête devrait toujours être utilisé en conjonction avec le cache de deuxième niveau .