记录mysql导入30G数据有索引的处理过程

[mysql] 2024-04-24 圈点331

摘要:记录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修复索引会非常快,不过要在关闭数据库或者锁表的情况下处理。

索引在数据量比较大的时候,数据库自身处理的效率添太慢,但用命令来操作索引会非常快。


mysql  索引  

感谢反馈,已提交成功,审核后即会显示