mysql大量插入数据效率问题? 我在存储过程中有个逻辑:按月(1-30天)有个循环,另从一个有3000条数据的表aa建立游标(需要循环该表记录),总共循环大约9万次,按月循环在外,游标循环在内,生成9万条新记录插入到另一表bb,循环一次插一条,共用了1个半小时,感觉太慢!请问各位有没有好的解决方案呢??LOAD DATA INFILE好像在存储过程中不能使用! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 disable index可能会提高些速度. 结构说得再清晰一点。如果用两层循环的话感觉不如用cross join 或inner join 的方式更快。只要将条件判断清晰了。 我是让表aa中的3000条记录在一个月中的每天都生成一条新的记录(有一个字段“价格”每天都需要更新),插入到表bb中,所以会生成30*3000=9万条记录 就是感觉你这个存储过程是否可以不用游标,用insert select 的批量插入形式。将条件搞清晰一点,应该可以提速,可以把结构和过程发上来看一下。 我需要通过游标来循环更新“价格”那个字段啊,有的需要更新有的不需要 insert select 好像不好满足需求 更新的话选择多表更新方式 update a inner join b on a.xx=b.xxset a.price = if (....,...,..) 想每次处理一百条就得建临时表之类的存储 Loop will speed up your insert. 推荐2个方案:1>方案一建立一个和bb表完全一样的cc表,同时该表去掉所有的索引运行存储过程: (1)清空cc表 (2)插入9万条记录到cc表 (3) insert into bb select * from cc 将cc表所有的记录拷贝到bb表中(如果业务逻辑允许的话,可以再插入数据前关闭索引。数据拷贝完成后,重新恢复索引)2>方案二如果数据库服务器内存够多的话建立一个和bb表完全一样的cc"内存"表,同时该表去掉所有的索引(速度会快不少)其他步骤同第一方案最后多加一步,最后清空cc内存表,释放占用的内存 mysql触发器的问题 在线等 大量结构相同数据库表的合并 数据库设计 的一个小问题,请教一下大家 查询年度的问题... 谁有MYSQL的latest manual?English version SQL的问题?????? Help!!!!!A MS access problem! Mysql索引的使用 数据库查询的group by 的不明白的地方 C#调用mysql存储过程和执行mysql存储过程的结果不一样? 求助 同一台主机 mysql中 两个数据库间的复制
只要将条件判断清晰了。
update a inner join b on a.xx=b.xx
set a.price = if (....,...,..)
想每次处理一百条就得建临时表之类的存储
1>方案一
建立一个和bb表完全一样的cc表,同时该表去掉所有的索引
运行存储过程:
(1)清空cc表
(2)插入9万条记录到cc表
(3) insert into bb select * from cc
将cc表所有的记录拷贝到bb表中(如果业务逻辑允许的话,可以再插入数据前关闭索引。数据拷贝完成后,重新恢复索引)2>方案二
如果数据库服务器内存够多的话
建立一个和bb表完全一样的cc"内存"表,同时该表去掉所有的索引(速度会快不少)其他步骤同第一方案最后多加一步,最后清空cc内存表,释放占用的内存