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

Mysql 更新超过1200万条循环记录或无循环记录的最佳方法,mysql,Mysql,我在一个表格中有超过1200万条记录,其中包含了过去15年中6000多个股票的数据。我想更新昨天的价格。请参见下面的示例表。我能想到的唯一更新昨天价格的方法就是使用脚本语言。我正在使用C#遍历所有记录。第一个循环是获取所有符号,第二个循环通过第一个循环中的每个符号并更新前一天的价格。这需要很长时间。有什么想法、新方法和其他方法可以加速这一过程吗 Symbol, todayis, price, yesterdayprice ---- --------- ------ ------ aapl,

我在一个表格中有超过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

您应该能够使用单个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')
更新
尝试执行自联接,匹配符号并通过
子日期(y.todayis,1)
t
代表“今天”,“y代表“昨天”)计算昨天的日期


当找到对应的行时,
COALESCE
提供从该行到更新的值。当该行不存在时,
“不知道”字符串用作默认值。

信息不足,生产正常运行时间对您重要吗?如果是,您听说过批量更新吗?安排休息时间怎么样?如果速度对您很重要,请考虑批量更新这些数据,并在低使用时间安排这些数据。这是一个备份数据库。正常运行时间一点也不重要。批处理,您的意思是将它们分为多个批处理?这会破坏规范化。更新数百万条记录需要时间,尤其是如果您的模式没有构造成易于操作的模式。规范化在这里不是问题。重要的是生成报告的速度。它说子日期是不可识别的内置函数。从技术上讲,昨天的价格并不意味着昨天是周末和假期。我应该说最后一个交易日的价格。@user3690095
todayis
列的类型是什么?这是
日期
?@user3690095很奇怪,因为
子日期
似乎是
日期
列()的有效内置函数。