如何获得多组不同的值

时间:2016-05-11 01:11:44

标签: sql-server ssis

这不是关于值的不同组合(从表中选择不同的col1,col2)

我有一个包含新加载的csv文件的表。

某些列链接到外键维,但给定列中的值可能不存在于引用表中。

我的目标是找到每列中不存在的所有值,但最小化源表中的表扫描量。

我当前的方法消耗了大量查询的输出,如下所示:

SELECT DISTINCT col2 FROM table WHERE col2 NOT IN (SELECT val FROM DimCol2)
SELECT DISTINCT col3 FROM table WHERE col3 NOT IN (SELECT val FROM DimCol3)

但是,对于N列,这会导致N个表扫描。

最多10M行,列的基数范围从5到5M,但几乎所有值都已存在于昏暗表中(> 99%)。

DimColN 的大小范围从5到50M,并且索引良好。

通过SSIS将csv加载到表中,因此可以在SSIS中拆分预处理,但我必须避免每行的SQL查询。

ssis服务器没有足够的备用ram来缓存所有的昏暗表。

1 个答案:

答案 0 :(得分:0)

如何使用LEFT JOIN并检查连接结果的位置为空,这意味着它们不存在于DimCol2中

SELECT DISTINCT Col2
FROM table a
LEFT JOIN DimCol2 on a.Col2 = b.val
WHERE b.val IS NULL