如何检查查询缓存中是否存在查询?

问题描述:

使用NHibernate,我如何检查我正在执行的查询是否已经存在于查询缓存中,或者不是以编程方式?如何检查查询缓存中是否存在查询?

+2

高级缓存的重点在于它们是透明的。 – 2010-11-07 13:23:15

+0

@Diego:我有函数A(),当它在一个非缓存查询上被调用将需要很长的时间,但有一个非常有效的方式来访问缓存。另一方面,我有函数B()从数据库加载更快(从而保存查询缓存),但不从缓存中获取。所以我需要知道它是否已被缓存。 – 2010-11-07 13:30:04

+0

如果您需要这种细粒度控制,请手动使用底层缓存而不是查询缓存。 – 2010-11-07 13:58:34

看看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