如题 。
如果一条条数据往里面插,这是很不现实的。会浪费很多时间的。有没有快速一点的方法啊?
我查了一下。看到网上有这么一个方法,也不知道对不对。请高手指点下。
以下是原文。哈,自己想到一个很有意思的办法,类似使用二分法进行搜索一样的原理。
我的思路就是,想往数据库中插入一条记录,然后使用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
--
------------------------------------------------
技术博客:http://www.imkevinyang.com/
请问这样的方法对吗?
如果一条条数据往里面插,这是很不现实的。会浪费很多时间的。有没有快速一点的方法啊?
我查了一下。看到网上有这么一个方法,也不知道对不对。请高手指点下。
以下是原文。哈,自己想到一个很有意思的办法,类似使用二分法进行搜索一样的原理。
我的思路就是,想往数据库中插入一条记录,然后使用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
--
------------------------------------------------
技术博客:http://www.imkevinyang.com/
请问这样的方法对吗?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货