[英]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.