我的網站的搜索過程非常緩慢。減慢它的一件事是它必須做的8表連接(它在〜6個搜索參數上也有一個WHERE
子句)。我試圖使用各種方法(如添加索引)來加快查詢速度,但這些都沒有幫助。在SQL Server中緩存連接表
我的一個想法是緩存8表連接的結果。我可以創建一個臨時的連接表,並讓搜索過程查詢這個表。我可以每10分鐘左右更新一次表格。
使用僞代碼,我會改變我的過程是這樣的:
IF CachedTable is NULL or CachedTable is older than 10 minutes
DROP TABLE CachedTable
CREATE TABLE CachedTable as (select * from .....)
ENDIF
Select * from CachedTable Where Name = @SearchName
AND EmailAddress = @SearchEmailAddress
這是一個工作的策略?我真的不知道我需要什麼語法來解決這個問題,或者我需要鎖定什麼,以防止同時發生兩個查詢時發生中斷。
而且,這可能需要相當長的時間,使一個新的CachedTable
每一次,所以我想嘗試在計算機圖形類似雙緩衝:
IF CachedTabled is NULL
CREATE TABLE CachedTable as (select * from ...)
ELSE IF CachedTable is older than 10 minutes
-- Somehow do this asynchronously, so that the next time a search comes
-- through the new table is used?
ASYNCHRONOUS (
CREATE TABLE BufferedCachedTable as (select * from ...)
DROP TABLE CachedTable
RENAME TABLE BufferedCachedTable as CachedTable
)
Select * from CachedTable Where Name = @SearchName
AND EmailAddress = @SearchEmailAddress
這是否任何意義?如果是這樣,我將如何實現它?如果不是,我該怎麼做呢?我嘗試使用索引視圖,但這導致了奇怪的錯誤,所以我想要這樣的東西,我可以有更多的控制權(另外,我可能會在未來轉移到另一臺服務器上)。
此外,如何創建像這樣的表的索引等?
這可能是顯而易見的問題,但我不太瞭解SQL或可用選項。
你需要腳本索引,約束等等。當你使用'SELECT INTO'時,它們不會隨着新表的免費提供。 – 2012-02-13 17:23:11