我有一个10M行的大表,我们称之为表A. 我还有另一个具有相同结构的表,并且有2M行。我们称之为表B.
每行包含大约20个字段(文本和数字)。
我想用表B中的相应行的值更新表A中的所有行(由主键连接)。
琐碎的UPDATE运行几个小时:
UPDATE A
INNER JOIN B
ON A.primary_key=B.primary_key
SET A.field1=B.field1,
A.field2=B.field2....;
你能建议一些更聪明的方法,而不是内连接上的单个UPDATE命令吗?
提前致谢!
答案 0 :(得分:0)
听起来,由于结果数据集的大小,您可能会遇到缓冲区问题。您可以尝试以较小的块,一次可能100K行。你可以根据PK做到这一点。找到表A中的max primary_key,然后除以100,000以获得所需的迭代次数。
// PSEUDO CODE
MAX = SELECT MAX(primary_key) FROM table A
NUM_PER_QUERY = 100000
NUM_ITERATIONS = CEIL(MAX/NUM_PER_QUERY)
for (i = 0; i < NUM_ITERATIONS; i++) {
UPDATE .... WHERE A.primary_key BETWEEN ((i * NUM_PER_QUERY) + 1) AND ((i + 1) * NUM_PER_QUERY)
}