Mysql 使用join和group by优化更新查询

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,但现在我试图在实际

我有一个包含字段DATASOURCE、PEOPLEID、TOTVALUE(约600万条记录)的表totals,还有一个包含字段PEOPLEID和VALUE(约300万条记录)的表source1。 在totals中,我为每个数据源提供了唯一的peopleid,而在source1中,我为每个peopleid提供了多条记录。 source1中的所有人员都已包含在总数中,但不包括其值

我设法在一个“测试”小表上获取更新查询,该查询从source1获取totals的字段TOTVALUE,但现在我试图在实际表上运行它,它将永远运行。。。我必须对source2source3等重复它

我运行的查询是:

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)