我的机器是笔记本cpu2.0G 
有一个表有id(自增,主键),cid(索引),eid,date(索引) 4列
都没有没有外键。插入500万条数据后,变得插入慢了。这是正常的吗?
把innodb_buffer_pool_size=200M后,快了些。问题是,是不是表很大以后,插入变慢了。我不太懂得数据库。所以请教讲讲原理,和怎样改进这个插入慢的问题。

解决方案 »

  1.   

    什么存储引擎?myisam 还是 innodb?可以先用 check table tablename 看一下。
      

  2.   

    对insert的性能影响比较大的因素是索引,你的表中有3个索引,在一定程度上会降低insert性能,但感觉随数据量的增大,对insert的性能影响并不会很大,因为索引是b树,可以认为是一颗很矮很胖的树,能否把具体的性能数据贴出来如果要优化的话,可以将insert合并,形如,insert into table_a(...) values(),(), ... , ()
      

  3.   

    我是innodb的。
    找到解决之道了。但折中了安全性。
    innodb_flush_log_at_trx_commit=0(极大的增加速度)
    其它设置,不明显,比如SET AUTOCOMMIT=0;innodb_buffer_pool_size=400M但是现在遇到Delete问题,当delete from 表名 where date<日期时,会选择出超过13万条记录之多。
    导致command超时,当然这不是问题。但是当删除时,硬盘一直转,响应其它的请求变慢。各位有没有一些好的方法。
    在delete时,不要MySql这么“疯狂”
      

  4.   

    delete 的时候把事务关了。delete 是事务中最消耗资源的一种操作相对于(insert , update)
      

  5.   

    哦 我是使用事务插入的。那样要比单个快很多。当表过大时,把innodb_flush_log_at_trx_commit=0,又能加快速度我这么觉得的,不对的地方,大家指教
      

  6.   

    delete时 我没使用事务?只是执行命令啊。怎么关事务?
      

  7.   

    innodb_buffer_pool_size=400M 
    怎么好像打了倒不好 在插入很多记录完成后 硬盘转个不停似乎在读取什么东西。
    不知道??回来变小再测试一下
      

  8.   

    主要是索引影响插入速度,每插入一个记录,都要启动下索引程序,那样表大时,速度肯定的会慢;解决这个问题的一般做法是在插入数据时,把索引的作用取消,插入完成后在重新建立索引。具体的参考MySQL手册中sql优化方面的知识。
      

  9.   

    http://www.wangchao.net.cn/bbsdetail_1410055.html
    这个有MyISAM引擎与InnoDB引擎性能的对比测试
      

  10.   

    测试了,innodb_buffer_pool_size的大小 确实影响插入的速度。500M和50M在2000万条的表中,插入速度平均3ms 和平均0.5ms
      

  11.   

    我找到删除一定条件,但不是服务器负担过重的方法
    mysql说使用limit,可以减少delete的响应时间,同时多次delete。每次delete,thread.sleep。这样mysql就不会很忙了,我试过,效果很好。
    当然这只适用于非紧急任务。
      

  12.   

    2000万条记录? 还没搞过这么大的表,不过这说明MySQL还是很强大的啊... 顶一下