2011-07-19 159 views
-1

我正在编写一个脚本来迁移我的用户表。所以基本上,我有3分贝表:事件,用户,新用户。用户表旨在由newusers表替换,并在稍后放弃。 newusers表具有oldusers id(PK)值的列。SQL查询性能

events2表有2个FK:1个用户,1个用于新用户。 我已经写过将记录用户迁移到新用户的部分,我在这里挣扎的是更新事件2表中的FK。

我写了以下内容:

update events2 
set newusersid = newuser.id 
from events2 e 
inner join newusers newuser on newuser.olduserid = e.userid; 

,但它需要很长的时间来执行。有没有改进的方法

迁移的原因之一是我们想要更改newusers表中的id值,因此我无法对相应的用户记录重新使用相同的PK值。

感谢您的帮助

N.

+1

您可能需要在'olduserid'上添加临时索引,并在升级完成后删除它。 – Blazes

+0

什么“很长时间?”这是一次性操作 - 是否需要快速? –

+0

@marc_s我正在使用postgresql 8.4 – Nikko

回答

2

你有与olduserid并依次在用户id上NEWUSER表的索引?这应该会加快查询的速度。

相关的,如果您正在更新事件表中的数百万行,那么就查询的执行速度而言,您将达到限制。

+0

你有'newuser.olduserid'上的索引吗? –

0
  1. 确保您有events2.userid的INDEX和newusers.olduserid
  2. 您可以尝试使用SELECT INTO查询,不知道对性能的影响,需要有关数据库

更多信息,表格和硬件。

+0

感谢提示,请原谅我的无知,我必须更新events2中的现有记录我不知道如何在这种情况下使用select into。 – Nikko

+0

我应该更清楚。我假设你用SELECT INTO或INSERT INTO创建了'events2'。而不是这样做,然后更新,我说的是在创建'events2'时进行更新。 – vol7ron

1

您的查询似乎有误。它不应该是以下吗?

update events2 
set newusersid = newuser.id 
from newusers newuser 
where newuser.olduserid = events2.userid; 
+0

你是对的谢谢你! – Nikko