提高批量更新查询性能

时间:2019-03-27 13:47:00

标签: sql postgresql

我正在寻找对数据库进行一些修复的方法,该方法需要向表中添加一些新字段并根据特定条件回填它们。有很多记录,我希望回填可以相对快速地运行,因为我当前的查询要花很长时间才能运行。

我尝试通过子查询进行更新,但这似乎不太有效。

下面的查询经过编辑以显示一般过程(因此语法可能会有所偏离)。希望你能理解我在做什么。/

我想更新帐户表中的每条记录。

我想通过遍历每条记录并在更新之前针对该记录的ID运行许多检查来做到这一点。对于联接中不匹配的任何记录,我只想将它们设置为0。

在数十万条记录中执行此操作似乎是永远的。我敢肯定,有一种更快,更有效的方法可以做到这一点。使用Postgres。

UPDATE

    accounts

SET

    account_age = a2.account_age,

FROM

    (

    with dataPoints as (

        select

            COALESCE(account__c.account_id as account_id,
account__c.account_age, 0) as account_age

        from account__c

        OUTER LEFT join points on points.account_id = account__c.id

        OUTER LEFT join goal__c on goal__c.id = scores.goal_id

    group by account_id, account__c.account_age

     )

       select

       account_id,

            max(dataPoints.account_age) as account_age,


        from scores

        join account on accounts.id = scores.account_id

        group by account_id

    ) as a2

WHERE accounts.id = a2.account_id;

0 个答案:

没有答案