SQL Server 海量数据导入的最快方法
程序员文章站
2022-10-11 08:24:15
最近做某项目的数据库分析,要实现对海量数据的导入问题,就是最多把200万条数据一次导入sqlserver中,如果使用普通的insert语句进行写出的话,恐怕没个把小时完不成...
最近做某项目的数据库分析,要实现对海量数据的导入问题,就是最多把200万条数据一次导入sqlserver中,如果使用普通的insert语句进行写出的话,恐怕没个把小时完不成任务,先是考虑使用bcp,但这是基于命令行的,对用户来说友好性太差,实际不大可能使用;最后决定使用bulk insert语句实现,bulk insert也可以实现大数据量的导入,而且可以通过编程实现,界面可以做的非常友好,它的速度也很高:导入100万条数据不到20秒中,在速度上恐怕无出其右者。
但是使用这种方式也有它的几个缺点:
1.需要独占接受数据的表
2.会产生大量的日志
3.从中取数据的文件有格式限制
但相对于它的速度来说,这些缺点都是可以克服的,而且你如果愿意牺牲一点速度的话,还可以做更精确的控制,甚至可以控制每一行的插入。
对与产生占用大量空间的日志的情况,我们可以采取在导入前动态更改数据库的日志方式为大容量日志记录恢复模式,这样就不会记录日志了,导入结束后再恢复原来的数据库日志记录方式。
具体的一个语句我们可以这样写:
alter database taxi
set recovery bulk_logged
bulk insert taxi..detail from 'e:\out.txt'
with (
datafiletype = 'char',
fieldterminator = ',',
rowterminator = '\n',
tablock
)
alter database taxi
set recovery full
这个语句将从e:\out.txt导出数据文件到数据库taxi的detail表中。
但是使用这种方式也有它的几个缺点:
1.需要独占接受数据的表
2.会产生大量的日志
3.从中取数据的文件有格式限制
但相对于它的速度来说,这些缺点都是可以克服的,而且你如果愿意牺牲一点速度的话,还可以做更精确的控制,甚至可以控制每一行的插入。
对与产生占用大量空间的日志的情况,我们可以采取在导入前动态更改数据库的日志方式为大容量日志记录恢复模式,这样就不会记录日志了,导入结束后再恢复原来的数据库日志记录方式。
具体的一个语句我们可以这样写:
复制代码 代码如下:
alter database taxi
set recovery bulk_logged
bulk insert taxi..detail from 'e:\out.txt'
with (
datafiletype = 'char',
fieldterminator = ',',
rowterminator = '\n',
tablock
)
alter database taxi
set recovery full
这个语句将从e:\out.txt导出数据文件到数据库taxi的detail表中。
推荐阅读
-
使用SQL Server数据库嵌套子查询的方法
-
C#实现异步连接Sql Server数据库的方法
-
SQL Server 2005 数据库转 SQL Server 2000的方法小结
-
php使用sql server验证连接数据库的方法
-
sql server数据库高可用日志传送的方法
-
SQL Server 数据库调整表中列的顺序操作方法及遇到问题
-
SQL SERVER 2012数据库自动备份的方法
-
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
-
SQL Server Management Studio Express管理器 没有导入导出数据的向导的解决方法
-
SQL Server 2008数据库设置定期自动备份的方法