【发布时间】:2014-04-05 12:06:49
【问题描述】:
在 sql server 2012 中,我有一个包含超过 2500 万行重复的表。该表没有唯一索引。它只有一个非聚集索引。我想消除重复,所以我在考虑以下内容
select distinct * into #temp_table from primary_table
truncate primary_table
select * into primary_table from #temp_table
我想知道 select distinct * 查询的成本有多大。如果我上面的程序非常昂贵,我想知道是否有另一种替代方式。
【问题讨论】:
-
这看起来是一种非常痛苦的清除重复项的方式,更不用说当您的截断清除所有数据时用户会发生什么。 Here are some ideas 关于如何更精细地删除重复项 - 接受的答案不需要唯一键或主键。
-
没错,斯图尔特。很痛苦。感谢您的想法。我还想知道 sql-server 如何设法提供唯一的行(就像它使用哈希之类的东西一样)。
-
搜索
sql uniquifier- 例如here。行仍然是 SqlServer 独有的 :) -
不要忘记,在您完成此操作后,放置一些东西(例如主键或唯一键)以阻止这种情况再次发生。或者您是否需要多次执行此清理?
标签: sql sql-server performance tsql sql-server-2012