mysql innodb表的效率问题

mynameiswf 2007-12-18 12:36:32
我有个innodb表,大约10个字段,其中6个有建索引,还有4个外键关系。在插入25w条记录的时候,1个小时没完成。

对于innodb类型的数据表,对于大数据量情况下,在配置上大家有什么建议?
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒得去死 2007-12-18
  • 打赏
  • 举报
回复
大数据量的插入
之前先
alter table tablename disable keys;
插入。
而且用MYSQL的批量插入语法。
insert into tablename values(),...,();
完了后
alter table tablename enable keys;
mynameiswf 2007-12-18
  • 打赏
  • 举报
回复
25w条数据记录的总共大小大约是120m左右。
mynameiswf 2007-12-18
  • 打赏
  • 举报
回复
有人做的测试:

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 效率,本次测试中三倍落后于 MyISAM

5. 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
--- 动态察看文件生成大小的变化幅度,比如每次增长的时间间隔,可以有更直观的了解

只是修改索引,效果不会很明显,因为最后实际你还是要把索引加上,加索引在大数据量情况下一样很花时间。我们更看重的是完整过程所花时间。
yangxiao_jiang 2007-12-18
  • 打赏
  • 举报
回复
楼上的意思就是在插入的时候先把keys失效,你也可以把索引删除,插入完成后在创建。

57,064

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧