我已经将nhibernate用于我的实现。涉及到大量的数据库提取,为了减少处理时间,我启动了查询缓存并在启动时加载了应用程序上的全表数据。然后linq反对它。启用了二级缓存和查询缓存。它正在工作,但是当我多次执行处理时,在我的日志文件中,我可以看到针对具有主键的缓存表的查询,并且它正在为该表中的每一行执行此操作。我认为它发生了,因为我的查询是在没有任何条件的情况下反对整个表。我不知道这是因为我的代码或任何其他问题有任何问题。当我使用较少数量的实体进行此操作时,它似乎正在工作。有谁知道这个问题?查询缓存只缓存行的主键吗?
答案 0 :(得分:2)
查询缓存只会缓存查询结果的主键。来自query cache documentation:
请注意,查询缓存不会 缓存中的任何实体的状态 结果集;它只缓存标识符 价值类型的值和结果。所以 应始终使用查询缓存 与二级相结合 高速缓存中。