如果local_infile 被禁用,InnoDB中怎么提高insert的效率呢?
1.尽量保持数据有序。减少数据插入时对索引的维护成本。
2.一次插入多条数据。减少日志,降低日志刷新磁盘的频率。减少sql解析次数。
3.在事物中进行插入。
减少事物创建的消耗。但也要控制事物的大小,最好不超过innodb_log_buffer_size。
SET autocommit=0;
INSERT INTO table_name VALUES (1,1,10),(2,1,20),(3,1,30);
COMMIT;
如果有唯一约束和外键也可以考虑临时禁用。
禁用唯一约束
SET unique_checks=0;
... SQL import statements ...
SET unique_checks=1;
禁用外键
SET foreign_key_checks=0;
... SQL import statements ...
SET foreign_key_checks=1;
4.尽量保证主键足够小,且表上没有多余的索引。
5.如果允许,考虑临时关闭二进制日志。
6.确保innodb_buffer_pool_size,innodb_log_buffer_size,max_allowed_packet 足够大。