繁体   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