我有一个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;
谢谢。
答案 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)