向现有表添加代理键(SQL SERVER)

时间:2018-08-06 20:27:21

标签: sql sql-server

我有一个2.25亿行的大型表。它没有任何主键。只是数据表而已。

我想添加一个TableID,并为其设置代理键。我已经创建了TableID bigint列。

输入键值(1、2、3等)的最快方法是什么?

这就像优化程序看到的那样可怕。

with CTE as (
    select ROW_NUMBER() 
      OVER (ORDER BY GEOID, A_ID, Zip, latitude, longitude) as rn,
    GID,
    A_ID,
    Zip,
    latitude,
    longitude from tableA
) update Table a set a.TableID = CTE.rn 
    where a.GID = CTE.GID
    and a.A_ID = CTE.A_ID
    and a.Zip = CTE.Zip
    and a.latitude = CTE.latutude
    and a.longitude = CTE.longitude;

谢谢。

2 个答案:

答案 0 :(得分:1)

您没有提到数据库,所以我假设使用PostgreSQL。然后,为什么不使用sequence

create sequence my_new_table_id;

alter table tablea add column tableid bigint;

update tablea set tableid = nextval('my_new_table_id');

其他数据库提供了类似的解决方案,它们都非常快。

答案 1 :(得分:0)

我使用了以下示例:

Update records in table from CTE

生成此:

\ze

远离优化器。希望对别人有帮助。