SSIS 查找转换使用 Table 或查询

SSIS Lookup Transform use Table or Query

我在具有 30 列的 table 上进行了查找转换,但我只使用了两列:用于连接的 ID 列和作为输出的更新列。

在连接上,我应该在下拉列表中输入查询 Select ID, Update From T1 还是使用 Table?

在下拉列表中使用 table 会像 Select * From T1 一样吗?或者 SSIS 足够聪明,知道我只需要 2 列。

我想我应该使用查询 Select ID, Update From T1

On the connection should I enter a query Select ID, Update From T1 or Use Table in the drop down?

最好指定你想要的列。

Using table in Drop down, would this be like doing Select * From T1

是的,它是一个SELECT*.

or is SSIS clever enough to know I only need 2 columns?

没有。

请记住,查找适用于从行数和记录集较小的维度表中提取数据。如果您要处理大量唯一数据,那么最好执行 MERGE JOIN。性能差异可能很大。例如,当对 20K 行数据使用 Lookup 时,您可能会在几十分钟内经历 运行 次。但是,MERGE JOIN 会在几秒钟内 运行。

查找的缺点类似于相关 sub-queries,因为它们会针对通过服务器的每一行触发对服务器的查询。您可以让 Lookup 缓存数据,这意味着 SSIS 会将结果存储在内存中,然后在转到服务器以获取所有通过 Lookup 的后续行之前检查内存。因此,这仅在小型缓存集有大量匹配记录时才有效。换句话说,当有大量不同的 ID 要查找时,查找不是最佳的。到那时,缓存数据几乎毫无意义。

在这里您可以切换到使用 MERGE JOIN。注意:您需要在 MERGE JOIN 之前对两个数据流执行 SORT,因为 MERGE JOIN 组件需要对传入行进行排序。

如果处理不当,单个放置不当的 Lookup 可能会使整个包崩溃 - 查找可能是巨大的性能瓶颈。不过,如果处理得当,Lookup 可以简化数据流的设计并通过消除 MERGE JOIN 数据流所需的额外开发来加速开发。

所有这一切的底线是您希望 Lookup 对服务器执行最少数量的查询。

如果您只需要查找 table 中的两列,那么最好使用 select 查询,然后从下拉列表中 selecting table 但是指定的列必须包含主键 (ID)。因为读取所有列会消耗更多的资源。即使它在小 table 秒内可能没有有意义的影响。

您可以参考以下数据库管理员社区的回答获取更多信息:


请注意,@JWeezy 提到的有关从大型 table 进行查找的内容是正确的。查找不是为大型 table 设计的,我将改用 SQL JOIN。