现在的位置: 首页 > 云计算 > 正文

怎样从海量数据中去重

2020年01月08日 云计算 ⁄ 共 696字 ⁄ 字号 评论关闭

  数据去重,分为部分列去重和全部列去重,全部列去重,使用distinct子句来实现,由于distinct操作符会创建在tempdb中临时表,因此,distinct操作是IO密集型的操作。而部分列去重,一般采用row_number排名函数来实现,也可以考虑使用忽略重复值的唯一索引来实现。在实际的项目开发中,部分列去重更为常见。

使用忽略重复值的唯一索引来实现

create unique index index_name
on new_table
(
index_columns
)
with(ignore_dup_key=on)

  通过插入和忽略重复值实现部分列的去重,相对来说,更容易控制,用户可以通过循环插入方式来执行,这样,在单独的一个事务中,控制插入数据的数量,能够控制产生的事务日志不至于太大,对于海量数据的去重,建议采用该方法。

  由于SQLServer不允许在包含重复值的数据表上创建唯一索引,因此,必须创建一个新的空表,新表时原始表的结构的复制,在部分列上创建忽略重复值的唯一索引。在执行插入操作时,IGNORE_DUP_KEY选项会忽略重复的索引键值,并抛出警告(Warning)。

使用row_number函数来实现

  选择排名函数,是因为排名函数有部分列分区排序的功能:首先在部分列上创建索引,这样数据库引擎能够根据索引列快速排序,然后通过row_number函数和cte来实现重复数据的删除。在数据去重时,需要注意,如果删除的数据量太大,数据库引擎会产生大量的事务日志,导致日志文件暴增,在选择该方法时,需要慎重。

结束语:以上就是关于怎样从海量数据中去重的全部内容,更多内容请关注学步园。

抱歉!评论已关闭.