SSIS 不识别索引?

Posted

技术标签:

【中文标题】SSIS 不识别索引?【英文标题】:SSIS does not recognize Indexes? 【发布时间】:2018-01-09 09:37:15 【问题描述】:

我在 varchar 列“A”上有一个带有非聚集索引的表。 当我使用 Order By A 子句时,我可以看到它扫描索引并在几秒钟内给我结果。 但是,当我将 SSIS 的 Sort Component 用于列“A”时,我可以看到对记录进行排序需要几分钟。


所以我知道它无法识别我的非聚集索引


有没有人知道为 SSIS 使用索引但不使用查询而不是组件??

【问题讨论】:

【参考方案1】:

Order By A 在数据库中运行。

使用排序组件时,排序在 SSIS 运行时完成。请注意,您用于提供给排序的查询中没有 order by(我假设)

它是在运行时完成的,因为它与数据源无关 - 您的源可以是 excel 或文本文件或内存数据集或多案例或枢轴或任何东西。

我的建议是尽可能多地使用数据库。

在 SSIS 包中使用排序的唯一原因是如果您的源不支持排序(即平面文件)并且您希望在包中将合并连接到其他内容。这是一个非常罕见和特殊的案例

【讨论】:

此外,当我的排序数据从某些组件传递时,合并连接不再识别它已排序。所以这是使用排序的另一个原因。正确的?还有其他解决方案吗? 您需要手动设置 IsSorted 属性。您,开发人员,是唯一知道它已排序的人。 (除非它直接来自已排序的组件)。如果您广泛使用排序组件,则会遇到性能问题。【参考方案2】:

这些时候,当我研究和使用 SSIS 时,我发现使用索引的唯一方法是连接到数据库。但是,当您在流中获取数据时,您所拥有的只是记录和数据。没有索引!


所以对于像Merge Join 这样之前需要Sort component 的任务,我尝试使用Lookup 组件而不是full cache 选项。并缓存整个数据,然后在Source component 查询

中使用ORDER BY

【讨论】:

【参考方案3】:

31 Days of SSIS – What The Sorts:

无论是一百行还是一千万行——排序转换必须先消耗所有行,然后才能返回第一行。这可能会将所有数据用于内存中的数据流路径。潜在的一点是,如果有足够的数据,它会溢出内存。

在右图中,您可以看到,直到一千万行都被接收到,数据流中的那个点之后的数据才能被处理。

如果您考虑转换需要做什么,则应该会出现这种行为。在发送第一行之前,需要检查最后一行以确保它不是第一行。

对于小而窄的数据集,这不是问题。但是,如果您的数据集很大或很宽,您会发现其中包含排序的包的性能问题。在内存中加载和排序的所有数据可能会严重影响性能

【讨论】:

以上是关于SSIS 不识别索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何在庞大的二进制数据中快速识别 1(索引)的连续范围?

更改手势识别器的索引

GaussDB(DWS)性能调优:indexscan导致的性能问题识别与优化

通过银行卡号识别归属银行,php方式

如何识别文件夹中是不是存在 Lucene.Net 索引?

模块无法识别索引变量[重复]