我在具有30列的表上进行了查找转换,但是我只使用了两列:用于连接的ID列和作为输出的Update列。
我应该在连接上输入查询Select ID, Update From T1
还是在下拉列表中使用表?
使用下拉列表中的表就像做Select * From T1
一样,或者SSIS足够聪明以至于我只需要2列。
我想我应该使用查询Select ID, Update From T1
。
答案 0 :(得分:1)
在连接上,我应该在下拉列表中输入查询“选择ID”,“从T1更新”或“使用表”吗?
最好指定所需的列。
使用下拉菜单中的表格,就像执行Select * From T1
是的,它是一个SELECT *。
还是SSIS足够聪明才能知道我只需要2列?
不。
请记住,查找非常适合从维表中提取数据,因为维表的行数和记录集很小。如果您要处理大量唯一数据,那么最好执行MERGE JOIN。性能差异可能很大。例如,当对2万行数据使用查找时,您可能会经历数十分钟的运行时间。但是,合并联接将在几秒钟内运行。
查询的缺点在于其行为类似于相关子查询,因为查询会为通过查询的每一行向服务器发起查询。您可以让Lookup缓存数据,这意味着SSIS会将结果存储在内存中,然后检查内存,然后再进入服务器以查找通过Lookup的所有后续行。因此,这仅在小型缓存集具有大量匹配记录的情况下才有效。换句话说,当要查找的大量唯一ID时,查找不是最佳的。到那时,缓存数据几乎毫无意义。
在这里您可以切换到使用MERGE JOIN。注意:由于MERGE JOIN组件要求对传入的行进行排序,因此您需要在MERGE JOIN之前对两个数据流都执行SORT。
如果处理不当,则单个放置不当的Lookup可能会使整个程序包瘫痪-查找可能是巨大的性能瓶颈。尽管经过正确处理,但Lookup可以消除MERGE JOIN数据流所需的额外开发,从而简化了数据流的设计并加快了开发速度。
所有这些操作的底线是您希望Lookup对服务器执行最少数量的查询。
答案 1 :(得分:1)
如果只需要查找表中的两列,则最好使用选择查询,然后从下拉列表中选择表,但指定的列必须包含主键(ID)。因为读取所有列将消耗更多资源。即使在小表中可能没有意义。
有关更多信息,您可以参考数据库管理员社区的以下答案:
请注意,@ JWeezy提到的有关从大表中查找的内容是正确的。查找不是为大表设计的,我将改用SQL JOIN。