我有一个包含字段DATASOURCE、PEOPLEID、TOTVALUE (~6兆记录)的表总计和一个带有字段PEOPLEID和值(ab )的表source1。3百万记录)。在总计中,每个DATASOURCE都有惟一的用户,而在source1中,每个数据源都有几条记录。source1中所有的人都已经被包括在totals中,而不是他们的价值观中。
我成功地获得了更新查询,该查询更新的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'您认为有更好的方法来运行和优化这个查询吗?
发布于 2013-01-30 09:02:46
=而不是LIKE,因为,我认为,您不是在搜索模式,对吗?INDEX上创建PeopleID:totals和sourcedatasource上添加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'发布于 2013-01-30 09:03:23
试着先加入数据。记住为两个表中的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.TotValueshttps://stackoverflow.com/questions/14600024
复制相似问题