2013-06-04 45 views
1

我经常将包含2400万行的2GB csv文件导入SQL Server。我将它作为文本导入,然后通过SELECT xxx INTO进行转换。拆分更新查询是否可以提高性能

如果我将这个转换分解为数据不同部分的单独查询,转换是否会使用较少的内存?

回答

3

说实话,它可能是最好不要使用该方法在所有,但使用而不是BULK INSERT如下规定:

Handling Bulk Insert from CSV to SQL

这是很简单的,但:

BULK INSERT dbo.TableForBulkData 
FROM 'C:\BulkDataFile.csv' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 

如果您是通过C#编写的,那么您可以使用SqlBulkCopy库,或者如果您需要从命令行执行此操作,则始终可以使用BCP。

注意,您目前使用的方法是高达10倍慢:

引用自文章:

数据可以从一个CSV文件中使用插入到数据库传统的SQLCommand类。但这是一个非常缓慢的过程。与我已经讨论过的其他三种方法相比,这个过程至少慢了10倍。强烈建议不要循环逐行扫描CSV文件,并对每行执行SqlCommand以将CSV文件中的大量日期插入到SQL Server数据库中。

+0

谢谢你。我将来会考虑这个。我真正追求的是具体问题的答案。以这种方式创建表使用大量的RAM或磁盘空间。 SQL是否在逐行处理SELECT INTO或doe需要在创建输出表之前到达输入数据的末尾? –

+0

SQL必须编译整个查询,因此加载CSV文件然后处理查询所涉及的内存将非常庞大。更好地流入文件。 – KaraokeStu

+0

同样的事情适用于更新查询吗?如果我通过设置列a =列a * 2更新表,我是否可以通过划分数据来获得更好的性能? –