我的表格总计包含字段DATASOURCE,PEOPLEID,TOTVALUE(约6百万条记录)和表格 source1 ,字段为PEOPLEID和VALUE(ab.3百万记录)。 在总计中,每个DATASOURCE都有一个唯一的人员,而在 source1 中,每个人都有几条记录。 source1 中的所有人员都已包含在总计中,但不包含在其值中。
我设法获得更新查询,更新总计的字段TOTVALUE从“测试”小表上的 source1 获取它,但现在我正在尝试让它在真正的桌子上运行它永远在运行...我将不得不重复它 source2 , source3 ,依此类推......
我运行的查询是:
UPDATE totals t
INNER JOIN
(
SELECT peopleid,
sum(value) AS TotValues
FROM source1
GROUP BY peopleid
) s
ON t.peopleid = s.peopleid
SET t.totvalue = s.TotValues
where
t.datasource like 'source1'
您认为有更好的方法来运行和优化此查询吗?
答案 0 :(得分:0)
=
代替LIKE
,因为,我认为,你不是在搜索模式吗?INDEX
列上创建PeopleID
:totals
和source
datasource
totals
上添加索引
查询,
UPDATE totals t
INNER JOIN
(
SELECT peopleid,
sum(value) AS TotValues
FROM source1
GROUP BY peopleid
) s
ON t.peopleid = s.peopleid
SET t.peopleid = s.peopleid
WHERE t.datasource = 'source1'
答案 1 :(得分:0)
首先尝试加入数据。 请记住在两个表中为peopleid列创建索引。
UPDATE totals t
INNER JOIN
(
select * from (
SELECT t.datasource,
peopleid,
sum(value) AS TotValues
FROM source1 s INNER JOIN
totals t
ON t.peopleid = s.peopleid
GROUP BY t.datasource, t.peopleid
) s_aux
) s
ON t.peopleid = s.peopleid and t.datasource = s.datasource
SET t.totvalue = s.TotValues