快速批量插入1个亿的数据,适合大部分数据库的方法

您所在的位置:网站首页 上亿条数据用什么数据库 快速批量插入1个亿的数据,适合大部分数据库的方法

快速批量插入1个亿的数据,适合大部分数据库的方法

2024-07-10 16:41| 来源: 网络整理| 查看: 265

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创,首发于 【掘金】📢作者格言: 生活在于折腾,当你不折腾生活时,生活就开始折腾你,让我们一起加油!💪💪💪 序言

干大事,需要学会分解目标。

插入1个亿,可以分解为插入10个1000w数据,进而分成插入100个100w数据…

那么让我们从小研究,怎么插入100条数据?

1. 批量插入几百条数据

对大部分数据库来说,批量插入数据都是比较简单的事情,最简单的方法无非是写好一条insert into语句,通过简单的复制和拷贝,就可以瞬间搞定100条插入数据。

然后借助sql的带界面的管理工具,比如Navicat系列,我们可以迅速执行这些语句,多次执行就可以产生成百上千条数据量了。

image.png

那么怎么搞定几百万数据呢? 一直靠点击执行,是不是太累了?

2.批量插入几百万条数据

数据库几乎都有存储过程功能,在存储过程内均支持一定的语法,来支持for循环,我们只需要利用这个功能,把我们的数据写到存储过程中,那么几百万甚至上千万的数据也不是问题。

CREATE OR REPLACE PROCEDURE "public"."InsertChar10001"() AS $BODY$BEGIN declare campaignId varchar(32):=''; autoInvitationId varchar(32):=''; siteId int:=0; sentNum int:=0; acceptNum int:=0; refuseNum int:=0; logTime timestamptz:='2010-01-01 00:00:00.000'; rand int:=0; ncount int:=0; ifQueued int:=ceil(random()*(2-1)+1); status int:=ceil(random()*(5-1)+1); nsource int:=0; preChatSocialMediaSource int:=0; preChatTicketId int:=0; visitorMessagesCount int:=0; ii int; ss timestamptz:=logtime; randTime varchar(50) := to_char(logTime, 'YYYY-MM-DD HH24:MI:SS'); begin ii:=1; for ii in 1..1000000 loop INSERT INTO "T_TEST" ("Id","SessionId" ,"StartTime" ,"EndTime" ) select uuid_generate_v4() Id, uuid_generate_v4() SessionId ,logTime StartTime ,logtime + interval '100 second' EndTime ; end loop; end; END$BODY$ LANGUAGE plpgsql

只要我们调节参数 for ii in 1..1000000,那么我们就可以自由定制数据量的大小,精确的生成随机数据到表内。

问题又来了,这么执行,生成几百万的数据,速度换可以接受,但是1000w以后,很多数据库都出现了问题,速度非常慢,有的甚至需要好几个小时才能生成数据。

那么怎么办呢?

3. 万能方法

牢记秘诀: insert into ... select ...。 几乎所有数据库都支持,并且速度都很快!

使用这个方法可以翻倍表内的数据,比如100w到200w,200w到400w… ,唯一的弊端就是有大量重复的数据。

INSERT INTO "T_TEST" ("Id", "SessionId" ,"StartTime" ,"EndTime") select uuid_generate_v4() "Id", "SessionId" ,"StartTime" ,"EndTime" from "T_TEST"

如果想精确复制的条数,可以利用 类似 select top n方式指定数据量,或者 where条件等等,自己自由组合吧。

需要注意的是,你的数据库容量需要足够哦,看我就出错了。

4. 小结

8月更新完毕,其实还是蛮困难的,写到最后都不知道写啥了,生成速度完全跟不上啊。

例行小结,理性看待!

结的是啥啊,结的是我想你点赞而不可得的寂寞。😳😳😳

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3