mysql5的手册中提到,插入一条记录,所需的时间比例大概是:
- 连接:(3)
- 发送查询给服务器:(2)
- 分析查询:(2)
- 插入记录:(1x记录大小)
- 插入索引:(1x索引)
- 关闭:(1)
并且表的大小以logN(B树)的速度减慢索引的插入,因此提高插入速度的方法大概有以下7种:
1.一个insert语句包含多个value值;
2.使用insert delayed方法;
3.使用insert into ...values(select ...from),即select的同时执行insert;
4.使用load data infile;
5.先禁掉索引,插入后再创建索引;
6.写锁表,插入,解锁。原因是索引缓存区仅在所有insert语句完成后才刷新到磁盘上一次;
7.增加key_buffer_size值来扩大键高速缓冲区。
关于load data infile的用法:从一个txt文件导入数据,指定LOCAL会从客户端文件系统上查找txt文件。
比如生成一个txt文件,
select * into '/home/tmp.txt' fields terminated by ',' from table_a;
导入文件,
load data infile '/home/tmp.txt' into table table_b fields terminated by ',';
语法:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char' ]
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET co