2017-08-02 33 views
0

我在varchar列'A'上有一個非聚集索引的表。
當我使用Order By A子句我可以看到它掃描索引並在幾秒鐘內給出結果。
但是,當我使用排序組件列'A',我可以看到它需要幾分鐘來排序記錄。SSIS不承認索引?


所以我明白,它不承認我的非聚集索引


沒有人有使用的SSIS指標而不是使用查詢,而不是組件的任何想法?

回答

1

31 Days of SSIS – What The Sorts

是否有一百個行或十個百萬行 - 所有的行必須通過排序轉換消耗之後才能返回第一行。這可能會將數據流路徑的所有數據放在內存中。可能的一點是,如果有足夠的數據,它會溢出內存。

在右邊的圖片中,您可以看到,在數據流中的那一點之後,所有千萬行都收到該數據後才能處理。

如果您考慮轉換需要執行的操作,則應該會發生此行爲。在第一行可以發送之前,需要檢查最後一行以確保它不是第一行。

對於小而窄的數據集,這不是問題。但是如果你的數據集很大或很寬,你可以發現性能問題與它們內部排序的軟件包有關。所有的數據加載和內存排序可以是一個嚴重的性能生豬

3

Order By A在數據庫中運行。

使用排序組件時,排序在SSIS運行時完成。請注意,您用來進行排序的查詢沒有排序(我假設)

它在運行時完成,因爲它是數據源不可知的 - 您的源可能是excel或文本文件或者在內存數據集或一個多核或主軸或任何東西。

我的建議是儘可能地使用數據庫。

在SSIS包中使用排序的唯一原因是,如果源不支持排序(即平面文件),並且想要在包中執行合併連接。這是一個非常罕見和特殊的情況

+0

此外,當我的排序數據從某些組件傳遞時,合併連接並不認爲它已經被排序了。所以這是使用排序的另一個原因。對?任何其他解決方案? –

+0

您需要手動設置IsSorted屬性。你是開發者,是唯一知道排序的人。 (除非它直接從分類組件中直接出來)。如果您正在廣泛使用排序組件,則會遇到性能問題。 –