我有以下格式的数据日志文件中的数据。高效的批量数据插入
每一行表示在数据库中的一行,并有500-1000的行同时被插入。
是最好直接通过调用存储过程插入数据库中的数据(该过程包含的逻辑调用日志文件和插入数据)
OR
是更好地解析它在应用程序和插入数据。
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的行同时被插入。
是最好直接通过调用存储过程插入数据库中的数据(该过程包含的逻辑调用日志文件和插入数据)
OR
是更好地解析它在应用程序和插入数据。
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,或交易。我假设店没有类似的东西),而不是每行查询插入它们一次一个。
你不觉得这是更好地创造一流的,并保持前处理逻辑在应用程序而不是数据库 – arjun 2012-02-20 13:22:40
的SQL SER ver可能具有与您为编写预处理代码所编写的代码一样优化的函数。另外,它还节省了服务器和脚本之间的往返时间。您可以使用文件系统上的绝对路径来访问该文件(假设它位于同一台服务器上并具有适当的权限)。最后,只要您使用事务,就可以工作,对于500-1000行,直接使用数据库或解析脚本中的查询之间的性能差异最小。 – AlexanderZ 2012-02-21 02:23:29
但是,如果您在线托管它,如何使用文件系统上的绝对路径。 – arjun 2012-02-21 03:59:04
这可能是.tsv格式(制表符分隔值)。
LOAD DATA LOCAL INFILE 'uniq.csv' INTO TABLE tbl
FIELDS TERMINATED BY '\t'
ENCLOSED BY ''
LINES TERMINATED BY '\n'
(column1, column2, column3)
\ t是制表符。如果它不起作用,请将其更改为空格。一行之后
手动处理行会效率不高,因为当你试图通过行逐行读取硬盘将被多次存取。 LOAD命令应该立即读取整个文件。
你应该记住,索引可以像这样的插入会严重减缓。如果您需要读取大量数据(例如100000行) - 有时在插入后更好地删除索引,插入和重新创建索引。
您也可以使用BCP(批量复制)命令。
导入Excel中该日志文件并将其保存为单独列名的CSV。 使用以下语法在cmd提示符中导入到表中。
去$ \ Program Files文件\ Microsoft SQL Server的\ 100个\工具\ BINN在表名的命令提示符
BCP “d:\日志\ log.csv” -c -S服务器-U用户名-P密码-t “” -r “\ n”
你可以另外指定-n代替-c ... -t: - 逗号分隔,-r: - 行终止
请访问http:/ /msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx – Phil 2012-03-13 18:08:49