有一个表里面有约25W条记录,我现在要把它的数据读出来分析后替换某些内容后再插入一个新表中,分析及替换在php下进行.操作是用while循环,一次5000条,1.5W条之前很顺利也很快(在本地上操作),在插入约超过1.5W条以后,就变得奇慢无比,简直是几秒才插入一条那样子,不知是什么原因?
我尝试清空缓存及重启mysql也无效,新建了一张表又快了,反正表一超过1.5W就慢了,请各位帮我分析一下.插入前还有一个判断重复的select
SELECT id,sortid FROM article WHERE title='$title'
mysql版本是5.0.27表类型是InnoDB,我刚看了下my.ini,几项配置是这样的,不知这个有没有关系?
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=35M
innodb_log_file_size=18M
innodb_thread_concurrency=8现在的ibdata1文件约506M,ib_logfile1两个各18M

解决方案 »

  1.   

    没办法,innodb大了之后问题很多。1. 清理一下日志 PURGE BINARY LOGS 
    2. 重建一下数据文件。
    - 1. 用mysqldump等工具导出数据
    - 2. 停止 mysqld
    - 3. 删除ibdata*, ib_logfile* 文件
    - 4. 重新启动 mysqld(这时mysqld就会自动创建 idbdata*, ib_logfile* 文件)
    - 5. 将到出来的数据导回去,体积才会减小。
      

  2.   

    ACMAIN_CHM 我的问题不是说innodb的ibdata文件过大,是说插入太慢,假如是因为ibdata过大而引起的话,那为何用一张新表又变快了呢,在同一个数据库里
      

  3.   

    没用上事务呀,连索引都没加,就是id主键然后自动增加,
    我是怀疑my.ini配置有问题,但又不确定,因为我服务器上在运行的有三十多W条数据都还蛮顺畅的,相同的程序
      

  4.   

    检查一下你的文件扩展的设置。show variables like 'innodb_data_file_path';
    show variables like 'innodb_autoextend_increment';估计你的初始尺寸比较小,每次 autoextend 设置也很少。这样当你插入记录占满了数据文件时,就会导致不停的扩展磁盘文件的大小。影响效率。同样还有  innodb_log_file_size 也调大一些。
      

  5.   

    谢谢ACMAIN_CHM innodb_data_file_path = ibdata1:10M:autoextend
    innodb_autoextend_increment =8现在是这样的,这两个要怎么设置呢?
    另innodb_log_file_size 现在是18M,要设为多少较合理呢,我刚把它调为72M,可mysql竟然无法启动??
      

  6.   

    当然不能直接调。这是目前的实际大小。你只能在初始化的时候调整。按照一楼的方法重新生成一个或者 仅攸改 'innodb_autoextend_increment';
      

  7.   

    'innodb_autoextend_increment'
    这个是什么意思?自动扩展?调到多少为好,能起到什么作用吗?
      

  8.   

    谢谢 ACMAIN_CHM 改了后还是依然慢,可能只能用你一楼的方法试下了