2015-11-06 142 views
0

我有一臺服務器有20個客戶端。如果我不使用客戶端1天,查詢結果在2:30分鐘後(超過1000行)到達。執行5/6查詢後,結果在幾秒鐘後到達。在SQL Server 2008 R2上查詢速度慢

我認爲這是SQL Server的調度問題。我該如何解決?

感謝

UPDATE

這是查詢你所描述的

Select * from [WWALMDB].[dbo].[v_AlarmConsolidated] 
Where Critico = 1 AND ApprovatoQA = 0 
AND InAttesaDiRiconoscimento Like '%param1%' 
AND (Tipo Like '%param2%') AND Area Like '%param3%' 
AND Nome Like '%%param4%%' AND Descrizione Like '%%param5%%' 
AND (([Dataora Scatto] >= CONVERT(DATETIME,'param6',105)) 
AND ([Dataora Scatto] <= CONVERT(DATETIME,'param7',105)) 
OR(([Dataora Rientro] >= CONVERT(DATETIME,'param6',105)) 
AND ([Dataora Rientro] <= CONVERT(DATETIME,'param7',105)) ) 
OR( ([Dataora PresoInCarico] >= CONVERT(DATETIME,'param6',105)) 
AND ([Dataora PresoInCarico] <= CONVERT(DATETIME,'param7',105)) )) 
ORDER BY AlarmID DESC 
+6

緩存沒什麼特別 – lad2025

+0

那麼,問題出在查詢中吧? – chianta

+0

@chianta不,問題是第一次運行查詢時,它從磁盤存儲中提取數據 - 幾次運行後,數據存儲在內存中,所以運行速度更快。研究緩存調整和綁定來解決這個問題。 –

回答

0

是一個正常的SQL服務器緩存行爲。

約MSSQL Server高速緩存機制的詳細信息you can find here

這是不可能告訴你,別的不知道

(你的SQL Server的機器和實際DB數據結構的例子SQL查詢,健康狀態)的背景UPDATE:

您的查詢可能是如此糟糕的優化,實際上是一個奇蹟,這只是2:30

SELECT * 

LIKE '%%*%%' 

ORDER BY 
+1

謝謝,我將優化查詢 – chianta

+1

您可以在SQL Management Studio中看到您的查詢的執行計劃。 使用表別名和只選擇這些列,你真的需要選擇。確保您正在訂購具有該列(或集羣主鍵)索引的列。對第一個字符'%'使用LIKE不是好主意,因爲執行計劃將自動執行完全查找,根本不使用任何索引。 或者您可以只選擇一些基礎數據到臨時表中,然後在這些列上創建一個索引,通過LIKE對它們進行過濾,然後再次加入關於這些ID的完整數據 – krtek