2011-03-30 90 views
1

有沒有別的辦法可以在我的代碼中使用循環來反覆執行select語句來獲取我的表中活動狀態列的值?SQLSERVER 2008反覆執行select語句會導致CPU使用率過高

這是一個簡單的「從dbo.mytable中選擇狀態」。但是,我不知道爲什麼這個簡單的sql語句在循環中執行時需要這麼多的CPU。

現在,循環使sqlserver使用超過50%的CPU。請諮詢任何替代方法或解決方法。

謝謝。

編輯:之前有人說「?你爲什麼 需要一個循環」,「不要用循環」等, 讓我解釋一下,這是不是我的 要求。這是從我的 company.Thanks

+2

請張貼代碼... – 2011-03-30 12:08:56

+0

有沒有辦法知道你沒有張貼實際的代碼,並顯示我們的執行計劃的方式代碼 – 2011-03-30 12:09:32

+1

如果沒有看到它們的代碼,就不能執行任何調試。和數據庫模式。有關索引的信息。等等。 – 2011-03-30 12:10:04

回答

3

如前所述,我們需要一些代碼來正確地調試,但這些都是我的想法......

有多快被這個循環中去?如果是毫不誇張地

while (x == false) { 
x = SQL STATEMENT 
} 

然後是,你將導致SQL負載了大量的,因爲該查詢將運行數千次。

如果在另一方面,你正在使用一個計時器,並每隔幾秒鐘循環那麼這樣的負荷是不尋常的,除非:

  • 有大量使用應用程序客戶端,以便在效果有多個循環中的所有打在同一時間服務器
  • 選擇的是數據量非常大的
  • 您的索引不是特別有效
  • 你不是打破了先前完成的循環造成不必要的負載

最後,您可能會考慮在您的DAL中構建一些緩存,以減少實際進入SQL Server的查詢數量。你可以實現你自己的邏輯來做到這一點,或者使用類似這樣的方式:http://bltoolkit.net/Doc.CacheAspect.ashx

+0

謝謝...這是那種我需要的建議 – Josh 2011-03-30 12:52:09

2

爲什麼這個簡單的SQL語句採用 如此多的CPU

  • ,因爲它已經是一個循環(不帶WHERE條件選擇返回所有行)並且不必在循環中調用
  • 也許是因爲您的行數太多
  • 也許是因爲上沒有索引0

有上status可以巨大改善性能非聚集索引。原因是SQL Server根本不需要觸摸表格。但是在循環中調用它仍然沒有什麼意義。

+0

謝謝...這是我需要的那種建議 – Josh 2011-03-30 13:09:35

0

你的循環多久調用一次聲明?

Foreach day 
    at noon: call query 

之間的巨大差異
Foreach millisecond 
    call query 
相關問題