我有两张桌子

Husband
---------
id
name
....


Wife
---------
id
name
husband_id (REFERENCES husband)
...

现在我想扭转这种关系。这意味着丈夫应该有一个妻子的身份证,引用妻子的身份证,妻子的丈夫身份证应该被删除。
改变桌子不是一件容易的事。但要让妻子有效率。你应该看到有很多条目。
首先我尝试了一种简单的方法:
UPDATE husband h SET wife_id =
  (SELECT id FROM wife w WHERE w.husband_id=h.id)

它首先在一个小数据库上进行了尝试,发现子选择的速度太慢,以至于实时数据库的更新将花费大于4小时的时间,这是不可接受的。
那么,如何更快地解决这个问题呢?
顺便说一下,这是一个Postgres 9.3.5数据库,afaik没有特殊的索引集。

最佳答案

您可以使用联接,它应该比关联子查询快:

UPDATE husband h
   SET wife_id = w.id
FROM wife w
WHERE w.husband_id = h.id;

关于sql - 使用SQL有效地反转外键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32268597/

10-11 01:16