【发布时间】:2012-03-10 13:26:41
【问题描述】:
有一个包含数百万条记录的大表。 phpMyAdmin 报告表大小为 1.2G。
需要对每一行进行计算。计算并不简单(不能放入 set col= calc 格式),它使用存储函数来获取值,因此目前我们对每一行进行一次更新。
这非常慢,我们想要优化它。
存储函数:
https://gist.github.com/a9c2f9275644409dd19d
每行都会被这个方法调用:
https://gist.github.com/82adfd97b9e5797feea6
这是在离线服务器上执行的,通常每周更新一次。
我们在这里有什么选择。
【问题讨论】:
-
需要更多信息才能给出任何有意义的答案。表的结构是什么?你在做什么计算,为什么?你的(未优化的)代码现在在做什么?
-
这个函数是什么?它是否使用其他表或同一表中的其他行?
-
如果没有关于实际表架构/存储函数/计算的任何信息,很难回答。另外,这是一次性更新还是需要经常运行的东西?
-
发布用于更新行的代码。但请记住,更新 mysql 中的数百万条记录肯定需要一些时间,无论您使用哪种方式...
-
已发布代码。我希望可以提出一些一般性建议,例如重新创建表或使用替换成,或从临时表中选择。