Sql 拆分更新查询是否会提高性能

Sql 拆分更新查询是否会提高性能,sql,sql-server,csv,Sql,Sql Server,Csv,我经常将一个包含2400万行的2GB csv文件导入SQL Server。我将其作为文本导入,然后通过选择xxx进行转换 如果我将其拆分为对数据不同部分的单独查询,转换会使用更少的内存吗 老实说,最好不要使用该方法,而是使用此处指定的批量插入: 但这很简单: BULK INSERT dbo.TableForBulkData FROM 'C:\BulkDataFile.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) 如果您是通过

我经常将一个包含2400万行的2GB csv文件导入SQL Server。我将其作为文本导入,然后通过选择xxx进行转换


如果我将其拆分为对数据不同部分的单独查询,转换会使用更少的内存吗

老实说,最好不要使用该方法,而是使用此处指定的批量插入:

但这很简单:

BULK INSERT dbo.TableForBulkData
FROM 'C:\BulkDataFile.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
如果您是通过C完成的,那么您可以使用SqlBulkCopy库,或者如果您需要从命令行完成,那么您可以始终使用BCP

请注意,您当前使用的方法速度要慢10倍:

引自文章:

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


谢谢你。我以后会考虑这个问题。我真正想要的是具体问题的答案。以这种方式创建表会使用大量RAM或磁盘空间吗。SQL是逐行处理SELECT INTO还是在创建输出表之前需要到达输入数据的末尾?SQL必须编译整个查询,因此加载CSV文件然后处理查询所涉及的内存将是巨大的。流式处理文件要好得多。同样的事情是否适用于更新查询?如果我通过设置column a=column a*2来更新一个表,那么通过对数据进行分区我会获得更好的性能吗?我不是100%确定,唯一的方法是运行一些测试。答案与你的问题无关。我使用多线程进行大容量插入,每秒将大约65000行插入到较小的SQL Server中。除非你能接近——不管你做了什么改变,批量插入是唯一合适的解决方案。