C# 高效的批量数据插入

C# 高效的批量数据插入,c#,asp.net,sql,C#,Asp.net,Sql,我在数据日志文件中有以下格式的数据 每行代表数据库中的一行,每次插入500-1000行 最好通过调用store过程直接将数据插入数据库(该过程包含调用日志文件和插入数据的逻辑) 或 在应用程序中解析它并插入数据是否更好 29 2011-02-01 11:00:40 1 0 1 0 30 2011-02-01 11:00:44 1 0 1 0 32 2011-02-01 11:00:49 1 0 1 0 为了提高性能,批量插入数据

我在数据日志文件中有以下格式的数据

每行代表数据库中的一行,每次插入500-1000行

最好通过调用store过程直接将数据插入数据库(该过程包含调用日志文件和插入数据的逻辑)

在应用程序中解析它并插入数据是否更好

   29   2011-02-01 11:00:40 1   0   1   0
   30   2011-02-01 11:00:44 1   0   1   0
   32   2011-02-01 11:00:49 1   0   1   0

为了提高性能,批量插入数据(使用LOAD FROM或transactions。我假设store做了类似的事情)比每行一次插入一个数据要好。

这可能是.tsv格式(制表符分隔的值)

\t是制表符。如果它不起作用,就把它换成空格

手动一行接一行地处理将没有效率,因为当您尝试逐行读取时,硬盘将被多次访问。LOAD命令应该一次读取整个文件


您应该记住,索引会严重降低这样的插入速度。如果您需要读取大量数据(例如100000行),有时最好删除索引、插入并在插入后重新创建索引。

您也可以使用BCP(大容量复制)命令

在excel中导入此日志文件,并将其另存为具有单独列名的csv。 使用以下语法在cmd提示符中导入到表中

转到cmd提示符中的$\Program Files\Microsoft SQL Server\100\Tools\bin

表名“D:\logs\log.csv”-c-S服务器名-U用户名-p密码-t”、“-r”\n中的bcp

您也可以指定-n而不是-c。。。
-t:-逗号分隔,-r:-行终止符

但另一个问题是,如果数据库和应用程序都是在线托管的,我如何从数据库访问文件?你不认为在应用程序中创建类并保留预处理逻辑而不是数据库更好吗?你不认为在应用程序中创建类并保留预处理逻辑而不是数据库更好吗数据库SQL server可能具有与您编写的任何预处理代码一样优化的功能。此外,它还节省了服务器和脚本之间的往返时间。您可以使用文件系统上的绝对路径来访问该文件(假设它位于同一台服务器上并且具有适当的权限)。最后,只要您使用事务,这两种方法都有效,对于500-1000行,直接使用db或从解析脚本查询之间的性能差异最小。但是,如果您在线托管文件系统,如何在文件系统上使用绝对路径。如果您在线托管文件系统,如何在文件系统上使用绝对路径。请参阅
LOAD DATA LOCAL INFILE 'uniq.csv' INTO TABLE tbl
     FIELDS TERMINATED BY '\t'
     ENCLOSED BY ''
     LINES TERMINATED BY '\n'
(column1, column2, column3)