更新超过1200万条记录循环或无循环的最佳方法

时间:2015-03-16 18:05:54

标签: mysql

我在一张表中拥有超过1200万条记录,其中包含过去15年来的6000多种股票数据。我试图更新昨天的价格。请参阅下面的示例表。我能想到的唯一更新昨天价格的方法是使用脚本语言。我正在使用C#循环遍历所有记录。第一个循环是获取所有符号,第二个循环通过第一个循环中的每个符号,并从前一天更新昨天的价格。这需要很长时间。任何想法,新方法和其他加快过程的方法?

Symbol, todayis, price, yesterdayprice
----  ---------  ------  ------
aapl, 5/13/2015, 123.59, 124.45
aapl, 5/12/2015, 124.45, 122.24
aapl, 5/11/2015, 122.24, don't know
aapl, 5/10/2015, 127.41, don't know

1 个答案:

答案 0 :(得分:1)

您应该能够使用单个SQL语句进行此更新,如下所示:

UPDATE MyTable t 
    LEFT OUTER JOIN MyTable y
                 ON y.Symbol=t.Symbol AND t.todayis = subdate(y.todayis, 1)
SET a.yesterdayprice = COALESCE(y.price, 'don't know')

UPDATE尝试执行自我加入,匹配符号并通过subdate(y.todayis, 1)计算昨天的日期(t代表“今天”,y代表“昨天“)。

找到相应的行后,COALESCE会将更新的值提供给它。当行不存在时,'don't know'字符串将用作默认值。