2017-07-15 128 views
0

我使用這個SELECT Statment Select語句超過50萬條記錄

SELECT ID, Code, ParentID,... 
FROM myTable WITH (NOLOCK) 
WHERE ParentID = 0x0 

這Statment重複每15分鐘(通過Windows服務)
當這個查詢的問題是數據庫變得緩慢向其他用戶運行過程中出現。
在查詢運行時避免性能下降的最佳方法是什麼?

+1

你應該調查數據庫變慢的原因是什麼,查詢能否得到改進,也許你認爲每次你真的需要獲取500k行,你在做什麼? –

+0

如果您的主要目的是爲了避免影響其他用戶,請將'OPTION(MAXDOP 1)'提示添加到查詢的末尾。如果您想加快查詢速度,請在'ParentID'上添加一個索引以及選擇列表中的列或將聚集索引更改爲'ParentID'。 –

+0

@JamesZ通常該查詢的結果大約是25條記錄,但我必須使用該查詢來查找它們。然後我有一些計算與其他數據庫的結果。 – CodeGear

回答

0

爲您的查詢生成執行計劃並檢查它。

  • 是否爲ParentId字段建立索引?
  • 有沒有其他方法可以優化查詢?

是否有可能提高託管SQL Server的服務器的性能?

  • 是否需要更多的磁盤或RAM?
  • 您是否有用於操作系統,數據,事務日誌,臨時數據庫的單獨驅動器(主軸)?

還有其他值得考慮的事情 - 您是否總是從您的應用程序中檢索此表中最新的值,或者可能緩存先前的結果並在一段時間內使用這些值?

+0

ParentId字段是否已編入索引?是的,還有其他方法可以優化查詢嗎?我不知道這是我知道的唯一方法。不需要更多的RAM – CodeGear

+0

您是否生成並查看了查詢的執行計劃? – STLDeveloper

-1

似乎你的表有很多記錄。您可以考慮實現按頁面進行數據檢索。您可以首先請求TOP 100行,然後有多個調用來獲取其餘數據。

我還不明白需要每15分鐘運行一次這樣的查詢。您可能會想到實現一個可以執行大多數處理的存儲過程並返回一小部分數據。如果它符合你的要求,這將是一個很好的改進。