2012-09-14 82 views
0

我在我的數據庫(MSSQL)中查看了超過1分鐘的結果。由於這需要很長時間,我讓用戶能夠看到實時數據或緩存數據。我這樣做是通過從視圖中生成數據並將其每小時插入一個表中並通過在use_cached = 0或1上定義一個配置變量來實現的。有條件地選擇查看

可以說視圖叫做v_foo,緩存表叫做t_bar。我想創建一個從v_foo如果use_cached = 0選擇另外的看法,從t_bar選擇是否use_cached = 1.

我想是這樣

Create view v_final as 
select * from v_foo 
where (select count(*) from config where id = 'use_cache' and value = 1) = 0 
UNION ALL 
select * from t_bar 
where (select count(*) from config where id = 'use_cache' and value = 1) = 1 

但是,這會導致所有要始終計算即使一個聯盟這兩個查詢他們不返回任何行。 使用一個函數也不是一個好的解決方案,因爲爲了使用IF條件返回一個表,我必須聲明一個臨時表,並且填充它需要將近17秒。

任何幫助?

+0

之前通過這樣跳火圈,我會採取在'v_foo'仔細看看。我懷疑那裏有一些調整機會。 –

+2

你能告訴我們你選擇的2個視圖的定義嗎? –

+0

如果你堅持使用視圖,我認爲你可以從包含if/then邏輯的表值函數中進行選擇。 – GilM

回答

0

例如,你可以使用存儲過程使用此代碼:

if (exists (select * from config where id = 'use_cache' and value = 1)) 
    select * from t_bar 
else 
    select * from v_foo