快速批量插入1个亿的数据,适合大部分数据库的方法 |
您所在的位置:网站首页 › 上亿条数据用什么数据库 › 快速批量插入1个亿的数据,适合大部分数据库的方法 |
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创,首发于 【掘金】📢作者格言: 生活在于折腾,当你不折腾生活时,生活就开始折腾你,让我们一起加油!💪💪💪
序言
干大事,需要学会分解目标。 插入1个亿,可以分解为插入10个1000w数据,进而分成插入100个100w数据… 那么让我们从小研究,怎么插入100条数据? 1. 批量插入几百条数据对大部分数据库来说,批量插入数据都是比较简单的事情,最简单的方法无非是写好一条insert into语句,通过简单的复制和拷贝,就可以瞬间搞定100条插入数据。 然后借助sql的带界面的管理工具,比如Navicat系列,我们可以迅速执行这些语句,多次执行就可以产生成百上千条数据量了。 那么怎么搞定几百万数据呢? 一直靠点击执行,是不是太累了? 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 |