【问题标题】:How expensive is select distinct * queryselect distinct * 查询有多贵
【发布时间】: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


【解决方案1】:

我不知道它有多贵,但另一种方法是创建另一个具有主键的表,将所有数据插入那里并按照此处所述静默拒绝重复项

http://web.archive.org/web/20180404165346/http://sqlblog.com:80/blogs/paul_white/archive/2013/02/01/a-creative-use-of-ignore-dup-key.aspx

基本上,使用 IGNORE_DUP_KEY

【讨论】:

  • 感谢 Leo 的链接。很有帮助。
猜你喜欢
  • 2014-05-01
  • 2015-08-24
  • 2021-07-06
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
相关资源
最近更新 更多