[英]Improve update SQL query performance
我有一個SQL數據庫,包含從Yahoo!下載的股票欄。 我正在嘗試創建一些指標來分析這些股票(即簡單移動平均線)。 我關心的是我的查詢的性能,它只是UPDATE @stockname SET SMA = @value WHERE id = @n
。 要更新2000行,需要2分鍾。 我嘗試使用存儲過程,但結果幾乎相同。
for (int i = 0; i < closing_prices.Count - length; i++)
{
double signalValue signalValue = Selector.SignalProcessor(Signal,
closing_prices.GetRange(i, length), length);
//Write the value into the database
string location = Convert.ToString(i + length + 1);
this.UpdateWithSingleCondition("_" + Instrument, columnName,
signalValue.ToString(), "id", location, "=", sql_Connection);
}
每次生成新值時,此循環都會調用存儲過程來更新列SMA。 是否有可能將整個列直接放入數據庫? 我認為這可以節省時間。 無論如何,在2分鍾內更新500行聽起來非常慢。
你能告訴我如何改善查詢的執行時間嗎?
分析你的表現。 你必須有一些瓶頸。 您的更新計數非常低。 您應該可以輕松地每秒進行10-30次更新,這將在2分鍾內轉化為更多....這是在股票計算機上,甚至不值得數據庫(這意味着許多快速光盤)。
在sql server上進行性能分析,找出問題所在。 你需要所有指數嗎?
首先禁用外部鍵約束。 然后再次啟用它們:
禁用“ALTER TABLE”“WITH NOCHECK CONSTRAINT ALL”
為了使他們能夠使用“ALTER TABLE”和“WITH CHECK CONSTRAINT ALL”。
我會創建一個接收字符串的存儲過程。 此字符串是XML或delimeted字符串。
然后使用浮動的許多字符串到表函數之一
並將字符串轉換為臨時表。
然后執行從temp到目標表的插入。
這樣您就可以調用數據庫服務器並避免聊天。 它比多次通話快很多。
避免使用表參數,因為您無法從代碼中調用em。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.