快速批量导入数据

1.成批装载较单行装载更快,因为在装载每个记录后,不需要刷新索引高速缓存;可在成批记录装入后才刷新
2.在表无索引时装载比索引后装载更快。如果有索引,不仅必须增加记录到数据文件,而且还要修改每个索引以反映增加了的新记录
3.较短的sql语句比较长的sql语句要快,因为它们涉及服务器方的分析较少,而且还因为将它们通过网络从客户机发送到服务器更快。
 
可根据以上原理推导出几个关于如何最快地转载数据的实际结论:
LOAD DATA(包括其所有形式)比insert效率更高。
LOAD DATA比LOAD DATA LOCAL 效率高。
如果必须使用insert,请使用批量插入,例如:insert into tbl_name values(...),(...)...指定的行越多越好,减少所需语句数目,降低索引刷新量。
使用压缩了的客户机/服务器协议以减少网络数据流量。对于大多数mysql客户机,可以用--compress命令行选项来指定。它一般用于较慢的网络,因为压缩需要占用大量的处理器时间。
让mysql插入缺省值

可大大加快导入.还有可以设置bulk_insert_buffer_size值来提高插入速度
在装载之前删除或禁用索引 (drop index和create index),若是新表可在装载数据后建立索引

ALTER TABLE `test` DISABLE KEYS ;

也可选用myisamchk或isamchk禁用或启用索引。需要该服务器帐户对表文件具有写入权。 


myisamchk --keys-used=0 tbl_name(禁用)
isamchk --keys-used=0 tbl_name(禁用)
             myisamchk --recover --quick --keys-used=n tbl_name(启用)[ n为表具有的索引数目。可用--description选项调用相应的实用程序得出这个值。 
myisamchk --description tbl_name  isamchk --description tbl_name]
isamchk  --recover --quick --keys-used=n tbl_name(启用)

如果希望在服务器范围内利用延迟索引刷新,只要利用 --delayed-key-write选项启动mysqld即可。

在此情形下,索引块写操作延迟到必须刷新块以便为其他索引值 空间为止,或延迟到执行了一个flush-tables命令后,或延迟到该索引表关闭


1,myisam表,可以先通过


alter table table_name disable keys;#先关闭表的索引检查,注意是非唯一索引! 

load data infile ‘/path/file’ into table table_name; 

         alter table table_name anable keys;#再打开索引 

         

 2,innodb表,上面方法不怎么凑效 

        可以对数据按主键进行排序,因为innodb是按主键顺序保存数据的;在导入数据之前可以先关闭唯一索引效验 

         set unique_checks=0; 

         如果有自动提交,先关闭 

         set autocommit=0;