有一个表里面有约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
2. 重建一下数据文件。
- 1. 用mysqldump等工具导出数据
- 2. 停止 mysqld
- 3. 删除ibdata*, ib_logfile* 文件
- 4. 重新启动 mysqld(这时mysqld就会自动创建 idbdata*, ib_logfile* 文件)
- 5. 将到出来的数据导回去,体积才会减小。
我是怀疑my.ini配置有问题,但又不确定,因为我服务器上在运行的有三十多W条数据都还蛮顺畅的,相同的程序
show variables like 'innodb_autoextend_increment';估计你的初始尺寸比较小,每次 autoextend 设置也很少。这样当你插入记录占满了数据文件时,就会导致不停的扩展磁盘文件的大小。影响效率。同样还有 innodb_log_file_size 也调大一些。
innodb_autoextend_increment =8现在是这样的,这两个要怎么设置呢?
另innodb_log_file_size 现在是18M,要设为多少较合理呢,我刚把它调为72M,可mysql竟然无法启动??
这个是什么意思?自动扩展?调到多少为好,能起到什么作用吗?