Mysql 使用join和group by优化更新查询
我有一个包含字段DATASOURCE、PEOPLEID、TOTVALUE(约600万条记录)的表totals,还有一个包含字段PEOPLEID和VALUE(约300万条记录)的表source1。 在totals中,我为每个数据源提供了唯一的peopleid,而在source1中,我为每个peopleid提供了多条记录。 source1中的所有人员都已包含在总数中,但不包括其值 我设法在一个“测试”小表上获取更新查询,该查询从source1获取totals的字段TOTVALUE,但现在我试图在实际表上运行它,它将永远运行。。。我必须对source2、source3等重复它 我运行的查询是:Mysql 使用join和group by优化更新查询,mysql,join,group-by,sql-update,query-optimization,Mysql,Join,Group By,Sql Update,Query Optimization,我有一个包含字段DATASOURCE、PEOPLEID、TOTVALUE(约600万条记录)的表totals,还有一个包含字段PEOPLEID和VALUE(约300万条记录)的表source1。 在totals中,我为每个数据源提供了唯一的peopleid,而在source1中,我为每个peopleid提供了多条记录。 source1中的所有人员都已包含在总数中,但不包括其值 我设法在一个“测试”小表上获取更新查询,该查询从source1获取totals的字段TOTVALUE,但现在我试图在实际
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'
您认为有更好的方法来运行和优化此查询吗?- 使用
而不是像那样使用=
,因为我认为您没有搜索模式,对吗
- 在两个表的
和totals
source
- 如果可能,在表
总计
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'
首先尝试连接数据。
记住在两个表中为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
确定set子句是正确的吗?我想你一定是打错了:
SET t.TotValues=s.TotValues
;)是的,更正了,谢谢;-)非常感谢。我正在努力理解这个(复杂的)问题。。是我错了,还是这里不存在这样一个条件,即要更新的汇总上的记录只有那些字段datasource='source1'的记录?您说“我必须对source2、source3等重复它”。然后我将此条件移动到select,以便在单个事务中执行此操作。查询很复杂,因为这是一次在mysql中连接更新表的过程。鉴于我是SQL的新手,我无法获得totals.fieldsource(信息在字段中)和fieldsource表(信息在表名中)之间的链接。PS:(我可能有多个来源的peopleid)