我在Mysql中有一个InnoDb表需要非常快速地处理插入(其他一切都可以像它想要的那样慢)。该表没有关系或索引一个自动递增的id和一个时间戳。
我从多个客户端运行脚本,在指定的时间(循环插入)中插入尽可能多的记录,并计算每秒的插入次数。
我每秒平均只有200次插入,我需要大约20000次。性能不会随着运行脚本的客户端数量或运行脚本的机器而改变。
有没有办法加快这些插入的效果?
------编辑--------
感谢您的帮助。我无法将任何插入分组在一起,因为当我们启动时,所有插入都将来自多个连接。我最终将该表的引擎切换到MyISAM,每秒插入次数立即达到40,000。
答案 0 :(得分:2)
您使用了哪个主键?
InnoDB使用聚簇索引,因此所有数据的顺序与其主键索引的顺序相同。
如果您不使用自动增量类型主键,则它会为每个插入进行大型磁盘操作。它会推送所有其他数据并插入新元素。
如需更长时间的参考,请尝试检查http://dev.mysql.com/doc/refman/5.0/en/innodb-table-and-index.html
答案 1 :(得分:1)
首先,执行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
。
答案 2 :(得分:0)
我建议在一个查询中尝试多个插入,例如
INSERT INTO table
(title, description)
VALUES
('test1', 'description1'),
('test2', 'description2'),
('test3', 'description3'),
('test4', 'description4')
或尝试使用程序