2010-11-07 167 views
1

使用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

回答

1

看看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代碼。

0

一個簡單的方法是拋出SQL Profiler。如果您看到查詢觸及數據庫,那麼它不在緩存中。

+0

不錯的想法,但我的意思是如何以編程方式做到這一點。 – 2010-11-07 13:26:46