0

我有一个包含字段 DATASOURCE、PEOPLEID、TOTVALUE(约 600 万条记录)的表总计和一个包含字段 PEOPLEID 和 VALUE(大约 300 万条记录)的表source1。总的来说,每个 DATASOURCE 都有唯一的peopleid,而在source1中,每个 peopleid 都有几条记录。source1 中的所有 peopleid都已包含在totals中,但不包含它们的值。

我设法获得更新查询,更新从“测试”小表上的 source1 获取的总计字段 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'

你认为有更好的方法来运行和优化这个查询吗?

4

2 回答 2

1
  • 使用=而不是LIKE因为,我认为,您不是在搜索模式吗?
  • 在两个表上创建一个INDEXon 列:和PeopleIDtotalssource
  • 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'
于 2013-01-30T09:02:46.833 回答
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
于 2013-01-30T09:03:23.603 回答