2011-10-20 97 views
0

我想優化我們的系統中使用最多的搜索查詢。到目前爲止,我已經添加了一些缺失的索引,並略有幫助。但我想進一步減少數據庫服務器上的負載。我將使用的一個選項是將結果集作爲LIST緩存在asp.net緩存中,這樣我就不必頻繁地訪問數據庫。是否可以緩存數據庫中選擇查詢的結果集?

但是,我想知道是否有辦法在db中緩存select查詢的一些部分。例如對於搜索結果,我們只考慮在過去180天內活躍並且將共享信息設置爲true的用戶。因此,這就像db每次處理的超級集合,然後應用其他條件,如指定的類別,城市等。有沒有可能以某種方式緩存超級集合,以便我可以針對超級集合運行查詢,而不是針對整個表運行查詢?將在此創建一個View的幫助?在讀取管理視圖時,我有點猶豫是否需要創建視圖,這可能會造成開銷,並且會消耗一些靈活性來修改表格。

我正在使用Sql-Server 2005,因此無法在表上創建過濾索引,我認爲這會對您有所幫助。

+0

你能發佈緩慢的搜索查詢嗎? –

回答

1

我同意@Neville K. SQL Server在緩存內存中的數據方面非常智能。你可能會看到你的努力有限的/沒有性能收益。

對於您的子查詢,您可以考慮索引視圖(僅限企業版)http://technet.microsoft.com/en-us/library/cc917715.aspx

+0

我正在嘗試索引視圖。但是,我的服務器不是企業版。我今天早些時候在某處讀到,如果它不是企業版,仍然可以使用索引視圖,但需要明確指出使用某個關鍵字。似乎無法找到關鍵字是什麼。 – shashi

+0

好的,爲了強制查詢使用視圖,關鍵字是在您共享的文章中提到的NOEXPAND。不幸的是,它不會帶來任何性能改進。 – shashi

+0

你是對的,會有有限的或沒有性能收益。我現在正在考慮緩存應用層中的對象,並且不要經常碰到數據庫。 – shashi

0

當然,可以這樣做 - 但我不確定它是否有幫助。

您可以創建一個計劃作業 - 每晚一次,或許 - 通過截斷它來填充名爲「active_users_with_share_info」的表格,然後根據選擇查詢重新填充該表格,以篩選出在過去180天內活動的用戶,使用「share_info =真「。

然後,您可以將您的搜索查詢加入此表。

但是,我懷疑這會做很多好事--SQL Server在緩存方面非常聰明。除非你處理大量的數據(數百萬條記錄),或者硬件非常有限,否則我懷疑你會得到任何可衡量的性能改進 - 但無論如何都要嘗試!

當然,這樣做的代價是應用程序中更多移動部件,更有趣的失敗模式(如果過夜批處理失敗,會發生什麼情況?),以及爲您帶入團隊的任何新開發人員提供更多培訓。

相關問題