1

我有一个my_obj有两个字段的表value_a varchar(5)value_b varchar(5)

事实上,这两个值变化不大,可以成对分组。充其量,最大数量 < 100 对。相反,我有几百万条记录my_obj

所有的查询都会干扰value_avalue_b花费很长时间。因此,我决定为所有可能的对创建表对,其中包含字段value_avalue_b. 因此我在表中添加了一个字段 id_pair my_obj

我已经用所有的对填满了桌子对,没关系。所以,现在,我想my_obj用这个命令相应地更新表:

update my_obj
set id_pair = p.id
from my_obj as o
inner join pair as p on p.value_a = o.value_a and p.value_b = o.value_b;

虽然查询已启动很长时间,但我运行了 aselect count(*) from my_obj where id_pair > 0;并返回了我0

所以我的更新查询有问题。 编辑/注意:作为事务单元的 plpgsql 函数在事务结束时执行提交,所以我在表中没有看到任何修改是完全正常的,因为我中断了函数。

我用主键上的条件更改了更新查询my_obj,以便只update对一条记录执行一个。

update my_obj
set id_pair = p.id
from my_obj as o
inner join pair as p on p.value_a = o.value_a and p.value_b = o.value_b
where o.id = 1234567;  -- 1234567 being the key of an existing record

令人惊讶的是,当我启动这个应该update只有一条记录的查询时,它似乎需要永远

我究竟做错了什么 ?

4

1 回答 1

3

这对你有什么作用?

update my_obj o
set    id_pair = p.id
from   pair p
where  p.value_a = o.value_a and
       p.value_b = o.value_b and
       o.id = 1234567; 
于 2013-03-27T23:37:58.527 回答