如何检查查询缓存中是否存在查询?
答
看看http://msdn.microsoft.com/en-us/library/ms174283.aspx。该物品具有检索特定查询的查询计划(第“A.从计划缓存中清除查询计划”)的样本:
SELECT plan_handle, st.text
FROM sys.dm_exec_cached_plans
WHERE text LIKE N'SELECT * FROM Person.Address%';
然而,这并没有集成到NHibernate的,你将不得不知道您的查询的SQL代码。
答
一个简单的方法是抛出SQL Profiler。如果您看到查询触及数据库,那么它不在缓存中。
+0
不错的想法,但我的意思是如何以编程方式做到这一点。 – 2010-11-07 13:26:46
高级缓存的重点在于它们是透明的。 – 2010-11-07 13:23:15
@Diego:我有函数A(),当它在一个非缓存查询上被调用将需要很长的时间,但有一个非常有效的方式来访问缓存。另一方面,我有函数B()从数据库加载更快(从而保存查询缓存),但不从缓存中获取。所以我需要知道它是否已被缓存。 – 2010-11-07 13:30:04
如果您需要这种细粒度控制,请手动使用底层缓存而不是查询缓存。 – 2010-11-07 13:58:34