Sql server SQL Server获取增量项

Sql server SQL Server获取增量项,sql-server,bulkinsert,enterprise,sqlperformance,Sql Server,Bulkinsert,Enterprise,Sqlperformance,我有一个数百万条记录表,其中定义了一个整数主键。 我还有一个不到一百万的ID在黑名单中。它们存储在从磁盘上的文件读取的内存中 我必须选择不在黑名单中的记录,即ID不在黑名单中的所有记录 我使用temp table single column:ID来插入不需要的ID,然后选择ID不在此表中的所有记录来解决这个问题 我主要关心的是性能: 在临时表中插入这么多记录 选择不在临时表中的项目 编辑 目前我使用的临时表如下所示: 使用单个列ID创建临时表 用ID填充临时表 在列上创建非聚集索引 使用类似以下

我有一个数百万条记录表,其中定义了一个整数主键。 我还有一个不到一百万的ID在黑名单中。它们存储在从磁盘上的文件读取的内存中

我必须选择不在黑名单中的记录,即ID不在黑名单中的所有记录

我使用temp table single column:ID来插入不需要的ID,然后选择ID不在此表中的所有记录来解决这个问题

我主要关心的是性能:

在临时表中插入这么多记录

选择不在临时表中的项目

编辑 目前我使用的临时表如下所示:

使用单个列ID创建临时表 用ID填充临时表 在列上创建非聚集索引 使用类似以下查询获取增量项:
从mytable m中选择m.id,其中m.id不在seelct id from tentable

这里最好的选择是添加一列来标记每一行是否被列入黑名单,例如:将其称为isBlockListed,并使该列保持最新


您还可以向该标志添加未聚集索引,以便快速选择ISBlockList=true/false的数据。

黑名单文件是静态的吗?如果是这样,您可以添加一个BIT列并在大型永久表中标记ID。如果黑名单文件不是静态的…那么文件格式是什么?如果是csv或固定宽度字段,您可以跳过步骤1,通过OPENROWSET从黑名单文件中读取ID;没有提供任何性能统计数据,很难评估。你能给我们看一下你的查询吗,或者它的简化版本。这将是有用的,看看你是如何排除记录,是通过连接,存在,在。。。子句等。此外,可以查看临时表的创建。也许索引会有用?@DMason不,黑名单不是静态的,它是动态获取的。此外,该列表位于我的app server上,而sql server运行在单独的远程sql server计算机上,因此我无法可靠地从中读取数据disk@Tanner请检查我的编辑