TSQL大数据集合并

时间:2014-11-14 04:08:37

标签: sql-server tsql ssis

我有两个数据集(1.9亿行和1亿行)。我需要找到最有效的方法将两者合并在一起,没有重复的行。我可以通过TSQL命令或SSIS进程来完成此操作。有没有人有任何关于完成这个过程的最有效方法的输入/经验?

两个表都具有相同的格式:

CREATE TABLE [dbo].[Table01]( 
    [StudentId] [char](10) NOT NULL, 
    [CollegeId] [char](6) NOT NULL, 
    [TermId] [char](3) NOT NULL, 
    [CourseId] [char](12) NULL, 
    [Title] [char](68) NULL, 
    [SectionId] [char](6) NULL, 
    [UnitsEarned] [decimal](5, 2) NULL, 
    [Grade] [char](3) NULL, 
    [CreditFlag] [char](1) NULL, 
    [UnitsAttempted] [decimal](5, 2) NULL, 
    [TopCode] [char](6) NULL, 
    [TransferStatus] [char](1) NULL, 
    [UnitsMax] [decimal](5, 2) NULL, 
    [BSStatus] [char](1) NULL, 
    [SamCode] [char](1) NULL, 
    [ClassCode] [char](1) NULL, 
    [CollegeLevel] [char](1) NULL, 
    [NCRCategory] [char](1) NULL, 
    [CCLongTermId] [char](5) NULL, 
    [batch_id] [int] NULL 
)

这些是需要区分以消除重复的字段:

[StudentId] 
[CollegeId] 
[TermId] 
[CourseId]

将运行此进程的服务器有8个内核,32GB RAM和SQL Server 2012.

1 个答案:

答案 0 :(得分:1)

在两个表的所有4列上创建复合聚簇索引。使用标准标识字段主键聚簇索引创建目标表,但在这4列上使用复合非聚簇索引。从table01插入目标表,使用派生表,该表也公开ROW_NUMBER()OVER(PARTITION BY StudentId,CollegeId,TermId,CourseId),并过滤除ROW_NUMBER为1的那些行。这将重复数据删除table01。然后使用table02执行相同的操作,同时使用NOT EXISTS检查目标表以确保行不存在。