2012-07-10 72 views
3

我有以下SQL查詢:SQL超時和查詢性能

SELECT TOP(100) 
    VIEW_RAUMBUCHUNG_RAUM.RAUMID, 
    VIEW_RAUMBUCHUNG.VON, 
    VIEW_RAUMBUCHUNG.BIS, 
    VIEW_RAUMBUCHUNG.RAUMBEZEICHNUNG, 
    VIEW_RAUMBUCHUNG.THEMA, 
    VIEW_RAUMBUCHUNG.V_EMAIL, 
    VIEW_RAUMBUCHUNG.VERANSTALTER, 
    VIEW_RAUMBUCHUNG_RAUM.COLOR, 
    VIEW_RAUMBUCHUNG.RAUMID AS Expr1, 
    VIEW_RAUMBUCHUNG_RAUM.BEZEICHNUNG 
FROM VIEW_RAUMBUCHUNG 
RIGHT OUTER JOIN VIEW_RAUMBUCHUNG_RAUM ON VIEW_RAUMBUCHUNG.RAUMID = VIEW_RAUMBUCHUNG_RAUM.RAUMID 

是否有改善此問題的方法? VIEW_RAUMBUCHUNG包含27000個條目,即使將結果限制在前100條記錄中,性能也非常低。或者有沒有一種方法來優化SQL Server?

我的第二個問題是,如果我嘗試加載整個27000個條目,我在20秒後得到一個超時,但我將IIS中的超時設置爲120秒。爲什麼是這樣以及如何避免超時?

在此先感謝。

+4

'TOP 100'沒有'ORDER BY'?你想要隨機結果嗎? – 2012-07-10 13:12:59

+0

使用'WHERE'子句並開始刪除不需要的記錄。從你發佈的內容中很難分辨出來。如果您的觀點足夠複雜,則可能會返回20條記錄並需要很長時間才能運行。 – 2012-07-10 13:16:37

+1

在數據量的大計劃中,27000條記錄在統計上與0條記錄無法區分。記錄的數量不是問題。另外,IIS中的超時與您的數據庫有什麼關係?它甚至是數據庫查詢需要很長時間,還是技術棧中其他位置的瓶頸?首先,確定你的實際瓶頸。如果它在數據庫查詢中,則通過分析器運行查詢來查看執行計劃。它應該指示任何表掃描或過多的數據操作。 – David 2012-07-10 13:16:51

回答

1
  1. 創建索引在兩個表中的RaumID字段
  2. 創建兩個表
  3. 設置你超時加入到更大的值或0的視圖代替,這意味着它不會超時
+0

如何在兩個表上創建索引,並且如何設置該超時? – Paks 2012-07-10 13:29:49

+0

@Paks,關於如何創建索引,這裏是你需要的所有信息:http://msdn.microsoft.com/en-us/library/ms189271(v=sql.105)一定要選擇SQL版本您正在使用的頁面 – Yaroslav 2012-07-10 13:36:29

+0

您可以通過在sql server management studio中打開服務器來設置超時,右鍵單擊服務器,轉到屬性,轉到連接頁面並查找SQL查詢超時設置。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-07-10 13:43:43