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