Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 在SQL Server 2005中对大量数据进行排序_Sql Server 2005_Ssis - Fatal编程技术网

Sql server 2005 在SQL Server 2005中对大量数据进行排序

Sql server 2005 在SQL Server 2005中对大量数据进行排序,sql-server-2005,ssis,Sql Server 2005,Ssis,我有一个SSIS包,其中有3000万条记录需要排序。但这需要很多时间。有没有有效的方法来对大量数据进行排序?与数据相比,驱动器中的内存更少……当记录集太大而无法放入内存时,排序的成本会更高 一种可能的解决方案是在构建时对输入进行排序。您可以通过向输入表添加索引来完成此操作,如: create clustered index IX_YourTable_SortColumn on YourTable(SortColumn) 如果无法对索引进行聚类,请使用include将列添加到已排序索引中: cr

我有一个SSIS包,其中有3000万条记录需要排序。但这需要很多时间。有没有有效的方法来对大量数据进行排序?与数据相比,驱动器中的内存更少……

当记录集太大而无法放入内存时,排序的成本会更高

一种可能的解决方案是在构建时对输入进行排序。您可以通过向输入表添加索引来完成此操作,如:

create clustered index IX_YourTable_SortColumn on YourTable(SortColumn)
如果无法对索引进行聚类,请使用
include
将列添加到已排序索引中:

create index IX_YourTable_SortColumn on YourTable(SortColumn)
    include (col1, col2, col3)

这种方法使前一步更加昂贵,并消耗更多的磁盘空间,以便将记录按正确的顺序保存在磁盘上。您必须进行测试,看看这种折衷是否值得。

在处理大型数据集时,SSIS中的排序速度非常慢。如果您需要SSIS排序,您应该考虑开发自己的排序组件,或者使用类似的第三方组件。

请发布您的选择,以便我们更好地了解您正在尝试的操作。这个表有很多列吗?您是否对多个列进行排序?您按哪个列进行排序?表中是否有该列(或那些列)的索引?虽然问题不清楚,但我怀疑OP所说的是SSIS排序转换,这是一种不使用任何物理表的内存操作。实际上,正在排序的数据可能来自平面文件或其他非关系源。但是OP应该澄清这一点,否则就不可能回答他的问题。为了继续@Pondlife的评论,我也假设OP试图使用排序转换。如果数据来源于支持排序的内容,请始终在那里进行。数据库在排序数据方面比SSI好得多。他们有适当的结构来支持它,SSI必须动态地完成它。此外,排序速度很慢(完全阻塞操作),并且每次阻塞转换时,数据流的内存成本都会翻倍。因此,您有30GB的内存可供SSI使用,您可以在排序前将内存分为15个,在排序后将内存分为15个。