我有一个MySQL的InnoDB表,需要非常快速地处理插入(一切可以像就是了慢)。 该表没有关系或索引的ID是自动递增和时间戳。
我跑了来自多个客户端脚本中插入多个记录尽可能在规定时间内(循环插入),并计算出每秒插入的数目。
我只获得每秒平均200个插入,我需要20000左右表现不运行脚本或脚本运行的计算机客户端的数量变化。
有什么办法,以加快这些插入的表现?
------编辑--------
感谢你的帮助。 我不能组任何插入在一起,因为当我们推出的所有插入将从多个连接到来。 我结束了切换引擎为表MyISAM和每秒立即冲高至40000插入。
首先,执行INSERTs
在TRANSACTION
:
START TRANSACTION;
INSERT ...
COMMIT;
其次,批量达多行成一个单一的INSERT
语句:
START TRANSACTION;
INSERT INTO table (only,include,fields,that,need,non_default,values) VALUES
(1,1,1,1,1,1,1),
(2,1,1,1,1,1,1),
(3,1,1,1,1,1,1),
...;
COMMIT;
最后,你可能会发现LOAD DATA INFILE
进行优于INSERT
,如果输入的数据是正确的格式。
你使用哪种主键?
InnoDB使用聚集索引,因此所有的数据都是以相同的顺序,其主键索引。
如果你不使用自动增量式主键,然后它使每个刀片大量的磁盘操作。 它会将所有其他数据,并插入新元素。
更长参考,请检查http://dev.mysql.com/doc/refman/5.0/en/innodb-table-and-index.html
我建议有多个刀片,试图在例如一个查询
INSERT INTO table
(title, description)
VALUES
('test1', 'description1'),
('test2', 'description2'),
('test3', 'description3'),
('test4', 'description4')
或尝试使用程序