【发布时间】:2011-08-22 08:49:04
【问题描述】:
大家好,我有以下 SQL Server 2008 脚本,它将检查 Table A 中是否已存在一行,以及它是否不插入来自 Table B 的数据。
这一直很好,直到Table A 开始填充大量数据。我们目前在这个表中有 3000 万行,并且这将继续增长到预测的 7000 万行。
如果这花费的时间太长并且影响其他进程,则会出现问题。只是想知道是否有更好的方法来检查表中是否已存在行。顺便说一句,这一切都是使用 SSIS 完成的。
脚本:
INSERT INTO TABLE A ([recordID],Field 1, Field2, Field 3, Field 4, Field 5)
SELECT
[TABLE B].[recordID],[TABLE B].[Field 1], [TABLE B].[Field2],
[TABLE B].[Field 3], [TABLE B].[Field 4], [TABLE B].[Field 5]
FROM TABLE B AS TABLE B
LEFT OUTER JOIN TABLE A AS TABLE A ON [TABLE B].[recordID] = [TABLE A].[recordID]
WHERE [TABLE A].[recordID] IS NULL
【问题讨论】:
-
确保正确的非聚集索引到位 - 最值得注意的是在
Table A和Table B中的RecordID列(因为这在您的 JOIN 条件中) -
我已经在表 A 和表 B 上有了 RecordID 的索引。但是我已经将它们设置为集群,它们应该是非集群的吗?
标签: sql sql-server sql-server-2008 ssis