在数据流任务中说,我有一个OLE DB源。我想提高SSIS的性能。我选择较少列的位置是否重要?
在数据库中创建一个选择较少列的视图,将其用作源。
在源代码中键入SQL SELECT以选择较少的列。
选择表格,然后取消选中来源内的列。
谢谢
答案 0 :(得分:5)
在SSIS中,您不应该使用Table name or view from a variable
,因为他们倾向于提取所有数据。它的行为为Select *。
The adapter opens a rowset-based on the table or view. Then it calls OpenRowset
in the validation phase to retrieve column metadata, and later in the execution
phase to read out the data.
最好的方法是键入SQL命令,以提高性能。但是使用View, 性能提高了很多倍。查看this文章,了解如何在OLEDB SOURce中使用View
答案 1 :(得分:4)
关于@ praveen答案的一个微不足道的澄清。由于open rowset调用的开销,在下拉列表中选择一个表和编写等效的SELECT *(甚至然后枚举列)之间存在性能差异,无论多么微小。
也就是说,如果您需要从SSIS中获得最佳性能,请尽可能明确。如果您只需要30列中的5列,请明确选择这些列。 SSIS可能会撤回所有30列并在客户端过滤它们。您只是浪费了网络带宽和,您必须读取聚集索引以获取覆盖索引可能存在的所有数据。增加读取成本+增加网络成本+增加SSIS列丢弃的内存成本?在任何工作开始之前,你需要预先支付一大笔费用。
您无法获得比起始组件耗材更快的吞吐量。