我用insert into插入,加for循环1000万次。但是笔记本操作起来太卡了。大神有更好的方法吗?
你可以换换不同的存储引擎试试,MyISAM 要比 Innodb 具有更高的插入速度,我之前测试的结果是,插入100万条数据,innodb 用了15分钟左右,而myisam用时50秒!
这是如何利用内存的技巧.
1000万数据一次性插入表?
呵呵, 包你整台服务器卡的只能重启.
给每次查询量定个上限量, 如一万, 那么可拆分成1000个查询包
可以稳定地单线程循环跑完这1000个包
如果数据无顺序依赖, 要高速点, 就并发或多线程, 如分成10个worker去跑, 每worker就只用跑100包, 且是并行的
1.要看插入内容的,只是单纯的数字字母信息会快一点,
2.其次如果数据库空中没有太多索引也会好一点
3.如果mysql是在固态硬盘内,读写会更快一点
4.但是最关键还是要看你内存和CPU频率
原回答
那些说用异步,循环什么,个人觉得不合理.
10w条数据啊,你就算内存够大,数据存进数据库里也会占用很多时间(IO流),甚至如果事务提交没处理好数据库也会占用内存.
直接在数据库里直接生成数据才是最快的办法.
自己生成一张id表(只存id一个字段),记录10w条(0-10w)
mysql做法:
insert into table t
select i.id, concat('名字', i.id) name,
concat('随机生成码7-12:',FLOOR(7 + (RAND() * 6))) rand,
ifnull(a.nickname, 'No nickname') nickname,
uuid() descript, --随机字符串
from_unixtime(unix_timestamp("20170101000000")+FLOOR((RAND()*60*60*24*365))) --2017年中随机日期
from table_id i
left join table_account a on a.id=FLOOR((RAND()*12)) --如果数据来源另外一些表
where i.id < 1000 --如果只要生成1000条
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
使用存储过程,参考