我有一个my_obj
有两个字段的表value_a varchar(5)
和value_b varchar(5)
事实上,这两个值变化不大,可以成对分组。充其量,最大数量 < 100 对。相反,我有几百万条记录my_obj
。
所有的查询都会干扰value_a
并value_b
花费很长时间。因此,我决定为所有可能的对创建表对,其中包含字段value_a
和value_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
只有一条记录的查询时,它似乎需要永远。
我究竟做错了什么 ?