BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #3933同步于 2009/10/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

如何快速插入一百万条数据

Keyman
2009/10/26镜像同步10 回复
请教一下,sql server如何快速插入一百万条数据,表结构很简单,因为是要测试性能用的, id, name, age 直接用while+insert效率非常低,应该是因为每一次insert都是一次事务导致的吧,感觉做数据库性能优化的应该经常遇到这样的问题才是,不知道有没有人有好的办法?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
coolfantasy机器人#1 · 2009/10/26
SQL SERVER 支持一句 INSERT 插入多行数据么? MySQL 是可以的 【 在 Keyman (KISS) 的大作中提到: 】 : 请教一下,sql server如何快速插入一百万条数据,表结构很简单,因为是要测试性能用的, : id, name, age : 直接用while+insert效率非常低,应该是因为每一次insert都是一次事务导致的吧,感觉做数据库性能优化的应该经常遇到这样的问题才是,不知道有没有人有好的办法? : ...................
Wing机器人#2 · 2009/10/26
事务不是可以自己开始,自己提交么?
esse13488789机器人#3 · 2009/10/26
sql server 有批量绑定么?
Keyman机器人#4 · 2009/10/26
【 在 Wing 的大作中提到: 】 : 事务不是可以自己开始,自己提交么? 隐式事务,自己开始自己提交那个是显示事务。 sql server貌似不支持一次多行
bigheadsnake机器人#5 · 2009/10/26
导入现有SQL
dragon2000机器人#6 · 2009/10/26
已知的数据库之中,最快的插入大批数据的方法应该都是load data。
Keyman机器人#7 · 2009/10/27
【 在 dragon2000 的大作中提到: 】 : 已知的数据库之中,最快的插入大批数据的方法应该都是load data。 恩,sql server有个bulkinsert,适合大批量插入数据,但是他得有个数据源,sql能先把数据写入某个文件然后再用这个bulkinsert导入吗?
Keyman机器人#8 · 2009/10/27
哈,自己想到一个很有意思的办法,类似使用二分法进行搜索一样的原理。 我的思路就是,想往数据库中插入一条记录,然后使用insert into tableA select * from tableA这样的方式来插入,这样一次就可以插入上一次插入的数目。第一次插入1条,接下来分别插入2,4,8,16,32,64,128,。。。。 很快就到100万了,使用这样的方式插入100万条数据还不到4秒(服务器配置)。 为了生成尽可能随机的数据,我后面在select from tableA的时候对各个字段做了一些处理 create table #tmp ( id int, name varchar(64), age int ) set nocount on insert into #tmp values(1,'ceshi',20) declare @max int = 1 while @max < 1000000 begin insert into #tmp select id+@max,convert(varchar,RAND(20)*1000000),convert(int,RAND()*100) from #tmp set @max = @max * 2 end select COUNT(*) from #tmp 做的处理实际上比较简单,首先id要连续增长,所以每次都要加上上一次插入之后的id最大值,age就是个100以内的随机正整数,name是个随机正整数。实际应用可以替换成函数。 而使用while一条一条插入的话,时间为35秒(服务器配置) create table #tmp ( id int, name varchar(64), age int ) set nocount on declare @i int = 1 while @i < 1000000 begin insert into #tmp values( @i,convert(varchar,RAND(20)*1000000),convert(int,RAND()*100)) set @i = @i + 1 end select COUNT(*) from #tmp drop table #tmp
mmgroup机器人#9 · 2009/10/27
【 在 Keyman 的大作中提到: 】 : 哈,自己想到一个很有意思的办法,类似使用二分法进行搜索一样的原理。 : 我的思路就是,想往数据库中插入一条记录,然后使用insert into tableA select * from tableA这样的方式来插入,这样一次就可以插入上一次插入的数目。第一次插入1条,接下来分别插入2,4,8,16,32,64,128,。。。。 : 很快就到100万了,使用这样的方式插入100万条数据还不到4秒(服务器配置)。 : ................... 如果一百万条数据要求服从某个概率分布呢。你这个方法怎么办?