这不是关于值的不同组合(从表中选择不同的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来缓存所有的昏暗表。
答案 0 :(得分:0)
如何使用LEFT JOIN
并检查连接结果的位置为空,这意味着它们不存在于DimCol2中
SELECT DISTINCT Col2
FROM table a
LEFT JOIN DimCol2 on a.Col2 = b.val
WHERE b.val IS NULL