[英]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.