[mysql] 2024-05-04 圈点846
摘要:记录mysql导入30G数据有索引的处理过程
记录mysql导入30G数据有索引的处理过程
条件环境:
myisam表
数据量:1.86亿条数据约23G
结构简单,字段不多
一个字段varchar(45)需要创建普通索引,前缀10;
一个字段varchar(60)取前缀10和和int(8)i创建联合索引
需要将数据转移到另外的电脑
难点:
导出导入数据的时间还算可接受,关键是索引的创建需要大量的时间。
操作步骤:
在导入数据前禁用索引
alter table tbname disable keys
导入数据非常快!
导入完成之后启用索引
alter table tbname enable keys
速度非常慢!
KILL掉后,出现错误如下:
ERROR 144 (HY000): Table "tbname.MYI" is marked as crashed and last (automatic?) repair failed
关闭mysql,执行修复命令:myisamchk -r -f tbname.MYI
关于myisamchk命令的说明介绍:http://www.xoxxoo.com/index/index/article/id/856.html
没过多久,修复成功!
重新启动mysql,正常!
思路分析:
创建索引非常慢,按照网上现存的很多方法"重新导入数据的方法",其实最后也是要创建索引的。在没有多少索引的情况下,转移速度还是不错的。
导入数据前用:alter table tbname disable keys,导入的速度超级快,导入数据恢复键用: alter table tbname enable keys就慢得吓人。这里应该可以在启用键后,KILL掉用myisamchk修复索引会非常快,不过要在关闭数据库或者锁表的情况下处理。
索引在数据量比较大的时候,数据库自身处理的效率添太慢,但用命令来操作索引会非常快。