Sql server 2005 在SQL Server 2005中对大量数据进行排序
我有一个SSIS包,其中有3000万条记录需要排序。但这需要很多时间。有没有有效的方法来对大量数据进行排序?与数据相比,驱动器中的内存更少……当记录集太大而无法放入内存时,排序的成本会更高 一种可能的解决方案是在构建时对输入进行排序。您可以通过向输入表添加索引来完成此操作,如: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
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个。