簡體   English   中英

提高更新SQL查詢性能

[英]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行聽起來非常慢。

你能告訴我如何改善查詢的執行時間嗎?

不是一次寫值出一個的,也許你可以使用一個存儲過程的表值參數 ,以在出貨單運從您的應用程序到數據庫的數據,那么MERGE將數據插入表中,節省了大量的廿四跳閘。

分析你的表現。 你必須有一些瓶頸。 您的更新計數非常低。 您應該可以輕松地每秒進行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM