优化更新两个大表之间的连接

时间:2016-04-01 12:29:13

标签: mysql join

我有更新这样做:

Update Table1 as T1
Inner Join Table2 as T2
On T1.X=T2.Y
Set T1.A=T2.B;

表1大约有10,000,000条记录 表2约有40,000条记录 我有T1.X和T2.Y

的索引

自然,这需要永远。有没有办法减少时间?

例如,我理解连接不是表记录的总和,而是产品。有没有办法(如果这是真的)在步骤中逐步加入1000个Table1记录?

2 个答案:

答案 0 :(得分:0)

显然,Join适用于两个完整的表。所以我修改了我的查询:

Update Table1 as T1
Inner Join (Select T2.Y,T2.B from Table2) as T2
On T1.X=T2.Y
Set T1.A=T2.B;

我还没有再次运行整个查询,但当我将其限制为测试时,其中T1.ID <100&#39;当我添加Select语句时,它从18秒减少到1秒。

UPDATE 我还测试过一次推送有限的#个记录。足够多的10条记录需要1秒,1000条记录需要6秒,10000条需要250秒。因此,我将在一段时间内测试嵌套,以便一次遍历1000条记录。

答案 1 :(得分:0)

它没有回答您的问题,但这里有一种使用您的逻辑使其更快的方法:

UPDATE table_A a 内连接 (SELECT TRUNCATE(lat,3) AS lat, TRUNCATE(lon,3) AS lon, address FROM table_B) b 设置 a.address = b.address 其中 TRUNCATE(a.lat,3) = b.lat AND TRUNCATE(a.lon,3) = b.lon AND a.Unknown parameter in input: "KeyConditionExpression", must be one of: TableName, IndexName, AttributesToGet, Limit, Select, ScanFilter, ConditionalOperator, ExclusiveStartKey, ReturnConsumedCapacity, TotalSegments, Segment, ProjectionExpression, FilterExpression, ExpressionAttributeNames, ExpressionAttributeValues, ConsistentRead 为 NULL;

当您需要对数据进行处理以使用它时,不要在“位置”中转换它们,而是在您将它们从表中取出时进行转换。