2014-03-04 17 views
4

在sql server 2012中,我得到一个包含超过2500万行重复数据的表。该表没有唯一的索引。它只有一个非聚集索引。我想消除重复,因此,我米以下选择不同*查询的代价是多少

select distinct * into #temp_table from primary_table 
truncate primary_table 
select * into primary_table from #temp_table 

我想知道如何昂贵的是SELECT DISTINCT *查询思维。如果我上面的程序非常昂贵,我想知道是否有另一种替代方法。

+2

这看起来是一个非常痛苦的清除重复的方式,更不用说当截断清除所有数据时用户会发生什么。 [这里有一些想法](http://stackoverflow.com/q/3317433/314291)关于如何更精细地删除重复项 - 接受的答案不需要唯一或主键。 – StuartLC

+0

那正确的斯图尔特。很痛苦。感谢您的想法。我也想知道sql-server如何管理提供唯一的行(就像它使用类似哈希的东西)。 –

+0

为'sql uniquifier'做一个google - 例如[这里](http://stackoverflow.com/questions/12321905/why-does-sql-server-add-a-4-byte-integer-to-non-unique-clustered-indexes)。行对SqlServer来说依然是独特的:) – StuartLC

回答