首页 > 解决方案 > 将表中的列值传递到 WHERE 子句

问题描述

如果这已经解决了,我深表歉意,但是我几天来一直在寻找解决方案,但在我的情况下似乎没有任何效果。

我正在尝试将我创建的临时表 (Table_A) 中的一些值传递到查询中的 WHERE 子句中。

我在查询中加入了临时表,我的 WHERE 子句如下所示: WHERE B.ID IN (Select ID from Table_A)

使用上述 WHERE 语句运行查询大约需要 45 分钟,而在不加入暂存表(表 A)并在 WHERE 子句中手动传递值的情况下运行需要 6 分钟,如下所示:

WHERE B.ID IN(值 1、值 2、值 3.. 等)

我不确定是什么导致查询运行速度慢得多。我正在尝试在包中使用修改后的查询(其中包含 Select 语句),这就是为什么我需要传递值而无需手动输入的原因。有谁知道我该如何解决这个问题?这可以在 SSIS 中完成吗?谢谢

标签: sql

解决方案


IN通常优化不佳。我发现EXISTS通常效果更好:

WHERE EXISTS (SELECT 1
              FROM Table_A A
              WHERE B.ID = A.ID
             )

特别是,这可以利用一个索引Table_A(ID)-- 如果ID是主键,它会自动存在。


推荐阅读