版本:5.0
表引擎: Myisam每秒大于4000的数据量,我采用insert into table(fld1....) values(),(),()...();的方式进行insert.感觉速度上不去,每秒只能够1000条一点,上不了2000,另外如果values()..();组合2000条insert 一次,速度反而没有200条insert 一次来得快。
一般大家会组合多少insert 一次呢?
大虾门帮忙支个招,什么方式insert 最快?
Load Data 速度会比这个更快嘛?谢谢!
表引擎: Myisam每秒大于4000的数据量,我采用insert into table(fld1....) values(),(),()...();的方式进行insert.感觉速度上不去,每秒只能够1000条一点,上不了2000,另外如果values()..();组合2000条insert 一次,速度反而没有200条insert 一次来得快。
一般大家会组合多少insert 一次呢?
大虾门帮忙支个招,什么方式insert 最快?
Load Data 速度会比这个更快嘛?谢谢!
你将数据存入临时表中再INSET试试,
OR
打开事务,INSERT 完毕后再提交
autocommit=1我想对这种组合insert 的情况来说,应该是不管
values()...()后面有多少个(),只是一次commit吧。
OR
用一定格式写入TXT,再LAOD DATA吧
一次insert一条,则会立即提交,而一次insert into table(fld1....) values(),(),()...(); 会把多个数据做为一个事务,速度当然会慢。如果数据量多,并且从逻辑上不是同一事务的话,建议逐条提交。大部分经验是每5条,或10条提交一次以获得最佳效率。
Load Data 会快一些,因为也是它的处理方式和SQL语句不同,直接通过mySQL的应用工具进行了记录的加载。先insert 到临时表然后再insert into Select 是不是多余一步?
如果没有什么加工处理,不如直接insert 到目标表中。
即插入一条记录,就提交一次
set autocommit=0 禁止自动提交
最后COMMIT ,OR 每隔N条记录自行提交一次
alter table tablename disable keys;2.并且将插入命令封闭成存储过程3.根据我的经验,insert into...values(),好像没有insert into...set xxx=xxx快,当然后面的语法对其他数据库不兼容
这种情况,应该set autocommit=0?在insert完了人工commit?我怎么感觉这种情况下,应该是一个insert完了,一次自动提交才对呢
MYSQL中,没有insert into...set xxx=xxx 这种SQL语句
测试过,在大数据量插入时,打开事务比没有打开大约快10-30%,当然
要根据你的索引、TRIGGER、表间关系等等因素不同速度有速度。打开事务,N个INSERT结束后,再手动提交
insert into table(fld1....) values();
autocommit=1的情况下,第次都会直接提交。
autocommit=0的情况下,则要等你执行commit;时才提交。事务中操作越多,系统需要的资源越多(redolog,等)自然越慢。这一点基本上所有数据库系统均如此,包括oracle.insert into table(fld1....) values(),(),()...();
则不管哪种autocommit=1autocommit=1/0 均被系统视为一个DML操作,这样这个事务中的数据就太多了。故尔比分开提交消耗更多资源。
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
我说的采用这种方式提高自己mysql效率的做法是经过自己实验的