繁体   English   中英

有效的批量数据插入

[英]efficient bulk data insert

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

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

最好是通过调用存储过程直接在数据库中插入数据(该过程包含调用日志文件和插入数据的逻辑)

要么

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

   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

这可能是.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提示符中的表。

在cmd提示符下转到$ \\ Program Files \\ Microsoft SQL Server \\ 100 \\ Tools \\ Binn

TableName中的bcp“D:\\ logs \\ log.csv”-c -S Servername -U username -P password -t“,” - r“\\ n”

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

最好(为了性能)批量插入数据(使用LOAD FROM或事务。我假设存储执行类似的操作),而不是一次插入一个,每行查询一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM