我有一個運行存儲過程的網站,當您打開主頁時。該存儲過程處理來自4個關係表的數據並給出結果。由於數據庫記錄增加,存儲過程的完成可能需要超過10秒,而且對於主頁來說太多了。將耗時的存儲過程的結果插入到表中
因此,我認爲,將存儲過程的結果定期插入到新表中並使用該表作爲主頁可能是一個很好的主意來解決問題,但我不確定這是否是SQL Server的良好實踐。
有沒有我的情況下,任何更好的解決方案?
編輯:這4代表每15分鐘約30插入更新。
我有一個運行存儲過程的網站,當您打開主頁時。該存儲過程處理來自4個關係表的數據並給出結果。由於數據庫記錄增加,存儲過程的完成可能需要超過10秒,而且對於主頁來說太多了。將耗時的存儲過程的結果插入到表中
因此,我認爲,將存儲過程的結果定期插入到新表中並使用該表作爲主頁可能是一個很好的主意來解決問題,但我不確定這是否是SQL Server的良好實踐。
有沒有我的情況下,任何更好的解決方案?
編輯:這4代表每15分鐘約30插入更新。
如果你願意有一個「指定的受害者」根據需要進行更新緩存(這也可能導致其他用戶等待),你可以做這樣的事情在一個存儲過程(SP):
CacheUpdated
列高速緩存表或其它地方存儲的值。)CacheUpdated
日期/時間來填充它。如果更新時間太長了用戶等待,或緩存重建塊太多的用戶,您可以通過在SQL Server代理創建工作運行在預定的時間間隔的存儲過程。 SP將:
@Now
。CacheUpdated = @Now
。CacheUpdate != @Now
。用戶的相應SP將簡單地返回最早的一組數據,即Min(CacheUpdated)
行。如果只有一組,那就是他們得到的。如果更新正在進行,則他們將獲得較舊的完整集合,而不是正在進行的工作。我用
至於你解釋你的問題,我看到這樣做沒有問題,但你必須更多地解釋,因爲我們不知道你收集的數據的類型以及它是如何提高每一次,以便提供你一個更好的解決方案
我向問題添加了更新頻率信息。 – Yavuz
是否可以通過在SQL Server代理中創建作業按計劃的時間間隔運行存儲過程,我發現在使用某些主機時並不是所有人都可以使用SQL Server代理。有沒有鏈接到您的網站,所以我可以告訴你我最好的方法。因爲可以用其他方式殺死同一只貓,有時它只是將設計改變成一個小小的登陸頁面。不是存儲過程。 –
一種方法是用日期/時間查詢已運行沿着緩存結果的表中的一個副本。當用戶請求數據時,存儲過程會檢查緩存的年齡。如果可以接受,那就是用戶得到的,否則用戶必須等待緩存重建。另一種方法是以適當的時間間隔重新構建緩存的計劃任務。如果正確完成,新查詢運行時總會有可用數據的副本(有點陳舊),這樣就沒有人需要等待結果。 – HABO