我有一个包含1000万条记录的表,在一列上有非聚集索引键,我正在尝试重复删除该表。我尝试使用select的插入,其中使用左连接或不存在;但每次我收到违反密钥的错误。以下是我使用的查询;
insert into temp(profile,feed,photo,dateadded)
select distinct profile,feed,photo,dateadded from original as s
where not exists(select 1 from temp as t where t.profile=s.profile)
这只会导致违反键错误。我尝试使用以下内容:
insert into temp(profile,feed,photo,dateadded)
select distinct profile,feed,photo,dateadded from original as s
left outer join temp t on t.profile=s.profile
where t.profile is null
我结束使用批量插入,因为日志文件变得太大但即使只有1000条记录,仍然会违反主键错误。
Destination Table :IX_Temp - profileUrl(ASC)--> unique key (non clustered)
Source Table: IX_PURL - profileUrl(ASC) ---> index (non clustered, not unique
答案 0 :(得分:1)
我认为distinct
没有像您期望的那样工作,因为时间部分会略有不同。
另一种方法是使用group by
并使用最早的dateadded
删除任何重复项。
也许是这样的:
Select Profile,
Feed,
Photo,
Min(DateAdded) as [DateAdded]
From Original
Group By Profile, Feed, Photo