【发布时间】:2009-11-17 22:04:49
【问题描述】:
在 NHibernate Profiler 中,我观察到,当我对关联使用渴望获取时,在 HQL 查询中使用“左连接获取”或在条件查询中使用 .SetFetchMode(),查询不再缓存在查询缓存中。
事实上,据我所见,只有非常基本的查询被缓存。如果有人可以让我深入了解哪些查询会被缓存,哪些不会被缓存,我会标记答案。
如果有什么不同,我正在使用 Memcached.... 对于查询密集的系统,L2 缓存有更好的选择吗?
我发现这相当具有挑战性 - 如果我不使用预加载,我会遇到 N+1 问题(但使用缓存),如果我进行预加载,我会从数据库中获取所有实体,但没有缓存。
似乎有一条很粗的分界线,两种策略都有性能提升,但两种策略都从另一个策略中夺走了性能。
如果有人能深入了解这条“粗线”上的位置,我应该获得最佳性能,或者如何“使线更细”......我会非常关注并标记答案。
【问题讨论】:
-
您的建议听起来不错,但我现在正在度假,我还没有机会尝试这个。我不记得我的查询是否有一个 select... 组件,这可能是我的问题的原因。我会试一试,然后再恢复。谢谢!
-
用我的一个相关问题更新了我的答案,我认为它可能非常相关。
标签: java nhibernate caching hql query-cache