快速插入1亿条数据

时间:2021-10-22 21:01:26
建一个表里面 字段1:   ID  字段2:ID的MD5值  
快速插入1--1亿得所有数据

要求就是 快速 。 哈哈哈哈

12 个解决方案

#1


分不够再加,哈哈哈

#2


还有不要担心我硬盘的大小这种低级问题;
也不要问我建这表要干嘛;就是要快速
哈哈哈

#3


写个存储过程,里面写个循环添加数据
http://bbs.51cto.com/thread-1115702-1-1.html

#4


用buck吧

#5


modis 数据吗?

#6


批量就很快吧。你的数据是什么数据?
1亿10000,10000,分成小段一次插一万一万次就插完了,如果一次10万1000次就可以了。

#7


insert into table(md5_value)
select null from table
用原表
指数据增长
最后批量更新md5_value

#8


估计是暴力破解的套路
曾做过一个案例,数据12T,记得是到7位组合,纯数字+字母是到8位,几年了,有点忘了

#9


刚试了一下 1Y 条数据,批量写入,第一列为数字,第二列为该数字的 MD5 ,总用时 15 分钟。 

不知道,能不能达到楼主认为的这种“快”

#10


这1亿数据已经存在了?MD5也加密了?这数据是什么格式?还是自己模拟生成这批数据?

id和MD5在数据库外部先加密
去索引
恢复模式为简单模式
bcp导入

#11


引用 9 楼 wmxcn2000 的回复:
刚试了一下 1Y 条数据,批量写入,第一列为数字,第二列为该数字的 MD5 ,总用时 15 分钟。 

不知道,能不能达到楼主认为的这种“快”


这个速度已经很快了,弱弱问下如何写入的?

#12



-- 代码我还真留了一份,数据我就不贴了,你自己跑跑看

create table test(id int, md5 varchar(32))
create table temp(id int primary key not null)
go
declare @c int =0 ;

insert into temp 
select top 100000
    row_number() over(order by (select 1)) id
from sys.columns a, sys.columns b,sys.columns c

while @c < 1000
begin
    begin transaction
    insert into test 
    select 
    @c * 100000 + id, 
    convert(varchar(32),hashbytes('MD5',ltrim(id)),2) from temp
    set @c = @c + 1
    commit
end
go 
select count(*) rscount from test 
go
drop table test, temp
go

#1


分不够再加,哈哈哈

#2


还有不要担心我硬盘的大小这种低级问题;
也不要问我建这表要干嘛;就是要快速
哈哈哈

#3


写个存储过程,里面写个循环添加数据
http://bbs.51cto.com/thread-1115702-1-1.html

#4


用buck吧

#5


modis 数据吗?

#6


批量就很快吧。你的数据是什么数据?
1亿10000,10000,分成小段一次插一万一万次就插完了,如果一次10万1000次就可以了。

#7


insert into table(md5_value)
select null from table
用原表
指数据增长
最后批量更新md5_value

#8


估计是暴力破解的套路
曾做过一个案例,数据12T,记得是到7位组合,纯数字+字母是到8位,几年了,有点忘了

#9


刚试了一下 1Y 条数据,批量写入,第一列为数字,第二列为该数字的 MD5 ,总用时 15 分钟。 

不知道,能不能达到楼主认为的这种“快”

#10


这1亿数据已经存在了?MD5也加密了?这数据是什么格式?还是自己模拟生成这批数据?

id和MD5在数据库外部先加密
去索引
恢复模式为简单模式
bcp导入

#11


引用 9 楼 wmxcn2000 的回复:
刚试了一下 1Y 条数据,批量写入,第一列为数字,第二列为该数字的 MD5 ,总用时 15 分钟。 

不知道,能不能达到楼主认为的这种“快”


这个速度已经很快了,弱弱问下如何写入的?

#12



-- 代码我还真留了一份,数据我就不贴了,你自己跑跑看

create table test(id int, md5 varchar(32))
create table temp(id int primary key not null)
go
declare @c int =0 ;

insert into temp 
select top 100000
    row_number() over(order by (select 1)) id
from sys.columns a, sys.columns b,sys.columns c

while @c < 1000
begin
    begin transaction
    insert into test 
    select 
    @c * 100000 + id, 
    convert(varchar(32),hashbytes('MD5',ltrim(id)),2) from temp
    set @c = @c + 1
    commit
end
go 
select count(*) rscount from test 
go
drop table test, temp
go