mysql innodb表的效率问题 我有个innodb表,大约10个字段,其中6个有建索引,还有4个外键关系。在插入25w条记录的时候,1个小时没完成。对于innodb类型的数据表,对于大数据量情况下,在配置上大家有什么建议? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大数据量的插入之前先alter table tablename disable keys;插入。而且用MYSQL的批量插入语法。insert into tablename values(),...,();完了后alter table tablename enable keys; 楼上的意思就是在插入的时候先把keys失效,你也可以把索引删除,插入完成后在创建。 有人做的测试:1. time=4706s, avs=2124行/s --- innodb_buffer_pool_size = 512M,thread_concurrency = 2 --- 观测 idb 文件的生成情况,越往后长得越慢,前一个G和最后一个G的增长速度相差 8 倍以上 2. time=3317s, avs=3014行/s --- innodb_buffer_pool_size = 3*512M,thread_concurrency = 2 --- innodb_buffer_pool_size 大小对速度有相当的影响3. time=3101s, avs=3224行/s --- innodb_buffer_pool_size = 3*512M,thread_concurrency = 2, unique key -> normal key --- unique key 对速度有一定的影响,小于 10%4. time=954s, avs=10482行/s --- 从测试 3 得出的表,改变表类型 alter table tl_test_log ENGINE=MyISAM --- key_buffer_size = 192M --- InnoDB 的 alter table 效率,本次测试中三倍落后于 MyISAM5. time=554s, avs=5392行/s, count(id)=2,933,380 --- 测试条件同 2,行数将近原 10M 的 1/3 --- 保证索引数据能完全存放在内存中:index length: 3.8G/3=1.3G < innodb_buffer_pool_size = 3*512M --- 前 3M 行记录的插入速度,相对于测试 2 有 78% 的效率提升,显然是之后的插入速度降低拖累了测试 2 的总体成绩6. time=238s, avs=12325行/s, count(id)=2,933,380 --- 测试条件同 4,行数将近原 10M 的 1/3 --- 前 3M 行记录的插入速度,相对于测试 4 有 17% 的效率提升,显然是之后的插入速度降低拖累了测试 4 的总体成绩 --- 对比测试 5,可知之后的插入速度降低幅度,InnoDB >> MyISAM --- 动态察看文件生成大小的变化幅度,比如每次增长的时间间隔,可以有更直观的了解只是修改索引,效果不会很明显,因为最后实际你还是要把索引加上,加索引在大数据量情况下一样很花时间。我们更看重的是完整过程所花时间。 关于自增字段不起效了是怎么回事呢 求解释啊欲哭无泪看不懂 mysql实现分组后组内排序 数据库数据同步问题 请问这是什么原因错误是CONCAT函数引起的吗?奇怪了 怎么用mysql创建数据库?权限不够怎么办? 从不同的表读取数据的存储过程如何写 >>有关两个数据表连接起来,产生新表的问题??(UNION)<< 怎么解 mysql 写法求解 求高手解决一下SQL时间问题, 『在线等待』mysqldump 请问这个命令生成的文件,恢复怎么这么慢呀 菜鸟求救:关于mysql数据倒入导出的问题?
之前先
alter table tablename disable keys;
插入。
而且用MYSQL的批量插入语法。
insert into tablename values(),...,();
完了后
alter table tablename enable keys;
--- innodb_buffer_pool_size = 512M,thread_concurrency = 2
--- 观测 idb 文件的生成情况,越往后长得越慢,前一个G和最后一个G的增长速度相差 8 倍以上 2. time=3317s, avs=3014行/s
--- innodb_buffer_pool_size = 3*512M,thread_concurrency = 2
--- innodb_buffer_pool_size 大小对速度有相当的影响3. time=3101s, avs=3224行/s
--- innodb_buffer_pool_size = 3*512M,thread_concurrency = 2, unique key -> normal key
--- unique key 对速度有一定的影响,小于 10%4. time=954s, avs=10482行/s
--- 从测试 3 得出的表,改变表类型 alter table tl_test_log ENGINE=MyISAM
--- key_buffer_size = 192M
--- InnoDB 的 alter table 效率,本次测试中三倍落后于 MyISAM5. time=554s, avs=5392行/s, count(id)=2,933,380
--- 测试条件同 2,行数将近原 10M 的 1/3
--- 保证索引数据能完全存放在内存中:index length: 3.8G/3=1.3G < innodb_buffer_pool_size = 3*512M
--- 前 3M 行记录的插入速度,相对于测试 2 有 78% 的效率提升,显然是之后的插入速度降低拖累了测试 2 的总体成绩6. time=238s, avs=12325行/s, count(id)=2,933,380
--- 测试条件同 4,行数将近原 10M 的 1/3
--- 前 3M 行记录的插入速度,相对于测试 4 有 17% 的效率提升,显然是之后的插入速度降低拖累了测试 4 的总体成绩
--- 对比测试 5,可知之后的插入速度降低幅度,InnoDB >> MyISAM
--- 动态察看文件生成大小的变化幅度,比如每次增长的时间间隔,可以有更直观的了解只是修改索引,效果不会很明显,因为最后实际你还是要把索引加上,加索引在大数据量情况下一样很花时间。我们更看重的是完整过程所花时间。